{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Load data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据分析Lib\n",
    "import pandas as pd\n",
    "# 数值计算Lib\n",
    "import numpy as np\n",
    "# 图像Lib\n",
    "import matplotlib.pyplot as plt\n",
    "# 机器学习库\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn import svm  \n",
    "from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Question 1\n",
    "思路:获取指定磁通量数据列,不关心其他无关数据."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 数据加载"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "DATA_FILE_PATH = \"附件一（训练集）.xlsx\"\n",
    "data = pd.read_excel(DATA_FILE_PATH, engine='openpyxl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"\\n['温度，oC',\\n '频率，Hz',\\n '磁芯损耗，w/m3',\\n '励磁波形',\\n '0（磁通密度B，T）',\\n\""
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# data.columns.tolist()\n",
    "'''\n",
    "['温度，oC',\n",
    " '频率，Hz',\n",
    " '磁芯损耗，w/m3',\n",
    " '励磁波形',\n",
    " '0（磁通密度B，T）',\n",
    "'''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 选择所有行,选择从第4列到第1028列\n",
    "dataframe_question_one = data.loc[:, '励磁波形' :]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 基本数据情况分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 3400 entries, 0 to 3399\n",
      "Columns: 1025 entries, 励磁波形 to 1023\n",
      "dtypes: float64(1024), object(1)\n",
      "memory usage: 26.6+ MB\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>励磁波形</th>\n",
       "      <th>0（磁通密度B，T）</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>...</th>\n",
       "      <th>1014</th>\n",
       "      <th>1015</th>\n",
       "      <th>1016</th>\n",
       "      <th>1017</th>\n",
       "      <th>1018</th>\n",
       "      <th>1019</th>\n",
       "      <th>1020</th>\n",
       "      <th>1021</th>\n",
       "      <th>1022</th>\n",
       "      <th>1023</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>正弦波</td>\n",
       "      <td>0.000213</td>\n",
       "      <td>0.000389</td>\n",
       "      <td>0.000566</td>\n",
       "      <td>0.000743</td>\n",
       "      <td>0.000919</td>\n",
       "      <td>0.001096</td>\n",
       "      <td>0.001272</td>\n",
       "      <td>0.001448</td>\n",
       "      <td>0.001624</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.001551</td>\n",
       "      <td>-0.001374</td>\n",
       "      <td>-0.001198</td>\n",
       "      <td>-0.001022</td>\n",
       "      <td>-0.000846</td>\n",
       "      <td>-0.000669</td>\n",
       "      <td>-0.000492</td>\n",
       "      <td>-0.000316</td>\n",
       "      <td>-0.00014</td>\n",
       "      <td>0.000036</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1 rows × 1025 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  励磁波形  0（磁通密度B，T）         1         2         3         4         5  \\\n",
       "0  正弦波    0.000213  0.000389  0.000566  0.000743  0.000919  0.001096   \n",
       "\n",
       "          6         7         8  ...      1014      1015      1016      1017  \\\n",
       "0  0.001272  0.001448  0.001624  ... -0.001551 -0.001374 -0.001198 -0.001022   \n",
       "\n",
       "       1018      1019      1020      1021     1022      1023  \n",
       "0 -0.000846 -0.000669 -0.000492 -0.000316 -0.00014  0.000036  \n",
       "\n",
       "[1 rows x 1025 columns]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataframe_question_one.info()\n",
    "dataframe_question_one.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0（磁通密度B，T）</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>1014</th>\n",
       "      <th>1015</th>\n",
       "      <th>1016</th>\n",
       "      <th>1017</th>\n",
       "      <th>1018</th>\n",
       "      <th>1019</th>\n",
       "      <th>1020</th>\n",
       "      <th>1021</th>\n",
       "      <th>1022</th>\n",
       "      <th>1023</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "      <td>3400.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-0.042593</td>\n",
       "      <td>-0.041677</td>\n",
       "      <td>-0.040765</td>\n",
       "      <td>-0.039856</td>\n",
       "      <td>-0.038950</td>\n",
       "      <td>-0.038044</td>\n",
       "      <td>-0.037140</td>\n",
       "      <td>-0.036236</td>\n",
       "      <td>-0.035333</td>\n",
       "      <td>-0.034430</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.047816</td>\n",
       "      <td>-0.047568</td>\n",
       "      <td>-0.047299</td>\n",
       "      <td>-0.047000</td>\n",
       "      <td>-0.046654</td>\n",
       "      <td>-0.046242</td>\n",
       "      <td>-0.045735</td>\n",
       "      <td>-0.045107</td>\n",
       "      <td>-0.044354</td>\n",
       "      <td>-0.043500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.052936</td>\n",
       "      <td>0.052279</td>\n",
       "      <td>0.051632</td>\n",
       "      <td>0.050991</td>\n",
       "      <td>0.050358</td>\n",
       "      <td>0.049731</td>\n",
       "      <td>0.049111</td>\n",
       "      <td>0.048497</td>\n",
       "      <td>0.047889</td>\n",
       "      <td>0.047289</td>\n",
       "      <td>...</td>\n",
       "      <td>0.054750</td>\n",
       "      <td>0.054860</td>\n",
       "      <td>0.054954</td>\n",
       "      <td>0.055024</td>\n",
       "      <td>0.055053</td>\n",
       "      <td>0.055015</td>\n",
       "      <td>0.054874</td>\n",
       "      <td>0.054592</td>\n",
       "      <td>0.054155</td>\n",
       "      <td>0.053582</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-0.268044</td>\n",
       "      <td>-0.265285</td>\n",
       "      <td>-0.262545</td>\n",
       "      <td>-0.259825</td>\n",
       "      <td>-0.257110</td>\n",
       "      <td>-0.254394</td>\n",
       "      <td>-0.251678</td>\n",
       "      <td>-0.248963</td>\n",
       "      <td>-0.246250</td>\n",
       "      <td>-0.243543</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.273755</td>\n",
       "      <td>-0.273906</td>\n",
       "      <td>-0.273688</td>\n",
       "      <td>-0.273007</td>\n",
       "      <td>-0.272493</td>\n",
       "      <td>-0.272451</td>\n",
       "      <td>-0.272691</td>\n",
       "      <td>-0.272710</td>\n",
       "      <td>-0.272229</td>\n",
       "      <td>-0.270612</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.063229</td>\n",
       "      <td>-0.061840</td>\n",
       "      <td>-0.060413</td>\n",
       "      <td>-0.059137</td>\n",
       "      <td>-0.057779</td>\n",
       "      <td>-0.056810</td>\n",
       "      <td>-0.055723</td>\n",
       "      <td>-0.054297</td>\n",
       "      <td>-0.053103</td>\n",
       "      <td>-0.051978</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.069173</td>\n",
       "      <td>-0.068901</td>\n",
       "      <td>-0.068739</td>\n",
       "      <td>-0.068640</td>\n",
       "      <td>-0.068417</td>\n",
       "      <td>-0.068133</td>\n",
       "      <td>-0.067610</td>\n",
       "      <td>-0.066843</td>\n",
       "      <td>-0.065919</td>\n",
       "      <td>-0.064607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-0.022872</td>\n",
       "      <td>-0.022307</td>\n",
       "      <td>-0.021812</td>\n",
       "      <td>-0.021322</td>\n",
       "      <td>-0.021033</td>\n",
       "      <td>-0.020608</td>\n",
       "      <td>-0.020116</td>\n",
       "      <td>-0.019655</td>\n",
       "      <td>-0.019137</td>\n",
       "      <td>-0.018650</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.025998</td>\n",
       "      <td>-0.025811</td>\n",
       "      <td>-0.025598</td>\n",
       "      <td>-0.025402</td>\n",
       "      <td>-0.025184</td>\n",
       "      <td>-0.024889</td>\n",
       "      <td>-0.024585</td>\n",
       "      <td>-0.024301</td>\n",
       "      <td>-0.023873</td>\n",
       "      <td>-0.023435</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>-0.001493</td>\n",
       "      <td>-0.001033</td>\n",
       "      <td>-0.000648</td>\n",
       "      <td>-0.000299</td>\n",
       "      <td>-0.000008</td>\n",
       "      <td>0.000247</td>\n",
       "      <td>0.000449</td>\n",
       "      <td>0.000658</td>\n",
       "      <td>0.000833</td>\n",
       "      <td>0.000990</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.007787</td>\n",
       "      <td>-0.007056</td>\n",
       "      <td>-0.006463</td>\n",
       "      <td>-0.005975</td>\n",
       "      <td>-0.005176</td>\n",
       "      <td>-0.004551</td>\n",
       "      <td>-0.003929</td>\n",
       "      <td>-0.003143</td>\n",
       "      <td>-0.002537</td>\n",
       "      <td>-0.001955</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>0.024421</td>\n",
       "      <td>0.026146</td>\n",
       "      <td>0.027867</td>\n",
       "      <td>0.029584</td>\n",
       "      <td>0.031299</td>\n",
       "      <td>0.033016</td>\n",
       "      <td>0.034734</td>\n",
       "      <td>0.036449</td>\n",
       "      <td>0.038162</td>\n",
       "      <td>0.039872</td>\n",
       "      <td>...</td>\n",
       "      <td>0.007189</td>\n",
       "      <td>0.008914</td>\n",
       "      <td>0.010639</td>\n",
       "      <td>0.012363</td>\n",
       "      <td>0.014085</td>\n",
       "      <td>0.015808</td>\n",
       "      <td>0.017529</td>\n",
       "      <td>0.019252</td>\n",
       "      <td>0.020975</td>\n",
       "      <td>0.022695</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 1024 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        0（磁通密度B，T）            1            2            3            4  \\\n",
       "count  3400.000000  3400.000000  3400.000000  3400.000000  3400.000000   \n",
       "mean     -0.042593    -0.041677    -0.040765    -0.039856    -0.038950   \n",
       "std       0.052936     0.052279     0.051632     0.050991     0.050358   \n",
       "min      -0.268044    -0.265285    -0.262545    -0.259825    -0.257110   \n",
       "25%      -0.063229    -0.061840    -0.060413    -0.059137    -0.057779   \n",
       "50%      -0.022872    -0.022307    -0.021812    -0.021322    -0.021033   \n",
       "75%      -0.001493    -0.001033    -0.000648    -0.000299    -0.000008   \n",
       "max       0.024421     0.026146     0.027867     0.029584     0.031299   \n",
       "\n",
       "                 5            6            7            8            9  ...  \\\n",
       "count  3400.000000  3400.000000  3400.000000  3400.000000  3400.000000  ...   \n",
       "mean     -0.038044    -0.037140    -0.036236    -0.035333    -0.034430  ...   \n",
       "std       0.049731     0.049111     0.048497     0.047889     0.047289  ...   \n",
       "min      -0.254394    -0.251678    -0.248963    -0.246250    -0.243543  ...   \n",
       "25%      -0.056810    -0.055723    -0.054297    -0.053103    -0.051978  ...   \n",
       "50%      -0.020608    -0.020116    -0.019655    -0.019137    -0.018650  ...   \n",
       "75%       0.000247     0.000449     0.000658     0.000833     0.000990  ...   \n",
       "max       0.033016     0.034734     0.036449     0.038162     0.039872  ...   \n",
       "\n",
       "              1014         1015         1016         1017         1018  \\\n",
       "count  3400.000000  3400.000000  3400.000000  3400.000000  3400.000000   \n",
       "mean     -0.047816    -0.047568    -0.047299    -0.047000    -0.046654   \n",
       "std       0.054750     0.054860     0.054954     0.055024     0.055053   \n",
       "min      -0.273755    -0.273906    -0.273688    -0.273007    -0.272493   \n",
       "25%      -0.069173    -0.068901    -0.068739    -0.068640    -0.068417   \n",
       "50%      -0.025998    -0.025811    -0.025598    -0.025402    -0.025184   \n",
       "75%      -0.007787    -0.007056    -0.006463    -0.005975    -0.005176   \n",
       "max       0.007189     0.008914     0.010639     0.012363     0.014085   \n",
       "\n",
       "              1019         1020         1021         1022         1023  \n",
       "count  3400.000000  3400.000000  3400.000000  3400.000000  3400.000000  \n",
       "mean     -0.046242    -0.045735    -0.045107    -0.044354    -0.043500  \n",
       "std       0.055015     0.054874     0.054592     0.054155     0.053582  \n",
       "min      -0.272451    -0.272691    -0.272710    -0.272229    -0.270612  \n",
       "25%      -0.068133    -0.067610    -0.066843    -0.065919    -0.064607  \n",
       "50%      -0.024889    -0.024585    -0.024301    -0.023873    -0.023435  \n",
       "75%      -0.004551    -0.003929    -0.003143    -0.002537    -0.001955  \n",
       "max       0.015808     0.017529     0.019252     0.020975     0.022695  \n",
       "\n",
       "[8 rows x 1024 columns]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dataframe_question_one.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 探索性检查:磁通量的周期变化折线图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 正弦波测试例子"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "row_1_data = dataframe_question_one.iloc[0, 2:]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    0.000389\n",
       "2    0.000566\n",
       "3    0.000743\n",
       "4    0.000919\n",
       "5    0.001096\n",
       "Name: 0, dtype: object"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "row_1_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.series.Series'>\n",
      "Index: 1023 entries, 1 to 1023\n",
      "Series name: 0\n",
      "Non-Null Count  Dtype \n",
      "--------------  ----- \n",
      "1023 non-null   object\n",
      "dtypes: object(1)\n",
      "memory usage: 16.0+ KB\n"
     ]
    }
   ],
   "source": [
    "row_1_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 确保数据是数值类型\n",
    "numeric_data = row_1_data.apply(pd.to_numeric, errors='coerce')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHFCAYAAADi7703AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABpbklEQVR4nO3deVhUZf8G8HsWGPYBZUdkc8NdQRH3FU2tbNNKcal8Mys187XFSn/5FmWblWllLpVpVmpZmYmmuACu4Io7m+woMOzLzPP7A5kiEFGWMzPcn+ua64ozz5m5z5Gcr8+c831kQggBIiIiIqqVXOoARERERIaMxRIRERFRHVgsEREREdWBxRIRERFRHVgsEREREdWBxRIRERFRHVgsEREREdWBxRIRERFRHVgsEREREdWBxRJRC7d+/XrIZDIcO3bslmMSEhIgk8mwfv365gt2U1W+qodSqUSbNm0wY8YMpKSk6Mft27cPMpkM+/btu+P3iIyMxJIlS5Cbm9t4wW/avHkzunTpAktLS8hkMsTGxtY6rip/1UOhUMDJyQn33ntvnX82zSU/Px8LFy5ESEgInJycIJPJsGTJEqljETULFktEdFtubm6IiorCuHHjJMuwbt06REVFITw8HDNnzsSmTZswaNAgFBYWNvi1IyMj8X//93+NXixlZWUhNDQUfn5+2LlzJ6KiotChQ4c693n77bcRFRWFffv24fXXX0dkZCSGDBmCS5cuNWq2O3X9+nV8+eWXKC0txYQJEyTNQtTclFIHICLDp1Kp0K9fP0kzdO3aFYGBgQCAYcOGQavVYunSpfj5558xefJkSbPdysWLF1FeXo4pU6ZgyJAh9dqnffv2+nM9aNAg2NvbY9q0adiwYQP+7//+rynj1snLyws5OTmQyWTIzs7GV199JVkWoubGmSUiuq3avoZbsmQJZDIZzp49i8ceewxqtRouLi544oknkJeXV21/IQRWrlyJnj17wtLSEg4ODnj44Ydx9erVu85UVVAkJibWOW779u0IDg6GlZUVbG1tMWrUKERFRVU7jv/+978AAB8fH/3XYLf7Ou92rzt9+nQMHDgQADBp0iTIZDIMHTr0jo+zqkDMyMiotv3gwYMYMWIEbG1tYWVlhf79++P333/XP6/RaKBUKvHee+/pt2VnZ0Mul0OtVqOiokK/fc6cOXByckJd66pXnReilojFEhE1yEMPPYQOHTpgy5YtePnll7Fx40a88MIL1cY8/fTTmDdvHkaOHImff/4ZK1euxNmzZ9G/f/8aRUB9Xb58GQDg5OR0yzEbN27E/fffDzs7O2zatAlr1qxBTk4Ohg4dioMHDwIAnnrqKTz//PMAgK1btyIqKgpRUVHo3bt3g1739ddfx2effQbg76/WVq5cecfHGR8fDwDVvr6LiIjA8OHDkZeXhzVr1mDTpk2wtbXFvffei82bNwMA7Ozs0KdPH+zevVu/3549e6BSqZCfn48jR47ot+/evRvDhw9nMUR0K4KIWrR169YJAOLo0aO3HBMfHy8AiHXr1um3LV68WAAQy5YtqzZ29uzZwsLCQuh0OiGEEFFRUQKA+OCDD6qNS05OFpaWlmLhwoX1yhcdHS3Ky8tFfn6++O2334STk5OwtbUV6enpQggh9u7dKwCIvXv3CiGE0Gq1wt3dXXTr1k1otVr96+Xn5wtnZ2fRv39//bb33ntPABDx8fF1ZrnT163K9OOPP972davGbt68WZSXl4uioiJx6NAh0bFjR9G5c2eRk5OjH9uvXz/h7Ows8vPz9dsqKipE165dRZs2bfTn/rXXXhOWlpaipKRECCHEU089JcaMGSO6d+8u/u///k8IIURKSooAIL788svbZqySlZUlAIjFixfXex8iY8aZJSJqkPvuu6/az927d0dJSQkyMzMBAL/99htkMhmmTJmCiooK/cPV1RU9evSo991r/fr1g5mZGWxtbTF+/Hi4urrijz/+gIuLS63jL1y4gNTUVISGhkIu//uvOhsbGzz00EOIjo5GUVHRHR9vU71ulUmTJsHMzAxWVlYYMGAANBoNfv/9d9jb2wMACgsLcfjwYTz88MOwsbHR76dQKBAaGopr167hwoULAIARI0aguLgYkZGRACpnkEaNGoWRI0ciPDxcvw0ARo4cedeZiUwdL/AmogZp3bp1tZ9VKhUAoLi4GEDltTZCiFsWNb6+vvV6n2+++Qb+/v5QKpVwcXGBm5tbneOvX78OALWOc3d3h06nQ05ODqysrOr1/k39ulXeffddDB8+HEVFRdi1axfCwsIwYcIEHD58GCqVCjk5ORBC3PL9/5mxf//+sLKywu7du+Hp6YmEhASMGjUK165dw6effoqCggLs3r0bvr6+8PHxuau8RC0BiyUialKO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rVYjNDQUubm5de4jhMCSJUvg7u4OS0tLDB06FGfPnq025umnn4afnx8sLS3h5OSE+++/H+fPn2/CIyEiIiJjYjTF0uOPP47Y2Fjs3LkTO3fuRGxsLEJDQ+vcZ9myZfjwww+xYsUKHD16FK6urhg1ahTy8/P1YwICArBu3TrExcXhzz//hBACISEh0GqNdwVsIiIiajxGcc1SXFwcOnfujOjoaAQFBQEAoqOjERwcjPPnz6Njx4419hFCwN3dHfPmzcNLL70EACgtLYWLiwveffddPP3007W+16lTp9CjRw9cvnwZfn5+9crHa5aIiIiMT30/v41iZikqKgpqtVpfKAFAv379oFarERkZWes+8fHxSE9PR0hIiH6bSqXCkCFDbrlPYWEh1q1bBx8fH3h6ejbuQRAREZFRMopiKT09Hc7OzjW2Ozs7Iz09/Zb7AICLi0u17S4uLjX2WblyJWxsbGBjY4OdO3ciPDwc5ua37gxbWloKjUZT7UFERESmSdJiacmSJZDJZHU+jh07BgC13tIphLjtrZ7/fr62fSZPnoyYmBhERESgffv2mDhxIkpKSm75mmFhYfoLzdVqNWehiIiITJikrQOee+45PProo3WO8fb2xqlTp5CRkVHjuaysrBozR1VcXV0BVM4wubm56bdnZmbW2Keq6Gnfvj369esHBwcHbNu2DY899litr/3KK69g/vz5+p81Gg0LJiIiIhMlabHk6OgIR8fbL0oYHByMvLw8HDlyBH379gUAHD58GHl5eejfv3+t+/j4+MDV1RXh4eHo1asXAKCsrAwRERF4991363w/IQRKS0tv+bxKpYJKpbptbiIiIjJ+RnHNkr+/P8aMGYOZM2ciOjoa0dHRmDlzJsaPH1/tTrhOnTph27ZtACq/fps3bx7efvttbNu2DWfOnMH06dNhZWWFxx9/HABw9epVhIWF4fjx40hKSkJUVBQmTpwIS0tLjB07VpJjJSIiIsNiNB28v/vuO8yZM0d/d9t9992HFStWVBtz4cIF5OXl6X9euHAhiouLMXv2bOTk5CAoKAi7du2Cra0tAMDCwgIHDhzA8uXLkZOTAxcXFwwePBiRkZG1XlBORERELY9R9FkydOyzREREZHxMqs8SERERkVRYLBERERHVgcUSERERUR2M5gJvQ1Z12Rc7eRMRERmPqs/t212+zWKpEeTn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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 创建折线图\n",
    "plt.plot(numeric_data)\n",
    "plt.title(f'Line Plot of Row 1')\n",
    "plt.xlabel('Column Index')\n",
    "plt.ylabel('Value')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 三角波测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "row_1500x_data = dataframe_question_one.iloc[1499:1501, :]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>励磁波形</th>\n",
       "      <th>0（磁通密度B，T）</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>...</th>\n",
       "      <th>1014</th>\n",
       "      <th>1015</th>\n",
       "      <th>1016</th>\n",
       "      <th>1017</th>\n",
       "      <th>1018</th>\n",
       "      <th>1019</th>\n",
       "      <th>1020</th>\n",
       "      <th>1021</th>\n",
       "      <th>1022</th>\n",
       "      <th>1023</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1499</th>\n",
       "      <td>三角波</td>\n",
       "      <td>-0.087577</td>\n",
       "      <td>-0.085587</td>\n",
       "      <td>-0.083606</td>\n",
       "      <td>-0.081636</td>\n",
       "      <td>-0.079677</td>\n",
       "      <td>-0.077730</td>\n",
       "      <td>-0.075791</td>\n",
       "      <td>-0.073854</td>\n",
       "      <td>-0.071920</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.095125</td>\n",
       "      <td>-0.095154</td>\n",
       "      <td>-0.095161</td>\n",
       "      <td>-0.095139</td>\n",
       "      <td>-0.095047</td>\n",
       "      <td>-0.094765</td>\n",
       "      <td>-0.094117</td>\n",
       "      <td>-0.092983</td>\n",
       "      <td>-0.091402</td>\n",
       "      <td>-0.089545</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1500</th>\n",
       "      <td>三角波</td>\n",
       "      <td>-0.098222</td>\n",
       "      <td>-0.095992</td>\n",
       "      <td>-0.093769</td>\n",
       "      <td>-0.091558</td>\n",
       "      <td>-0.089360</td>\n",
       "      <td>-0.087172</td>\n",
       "      <td>-0.084992</td>\n",
       "      <td>-0.082814</td>\n",
       "      <td>-0.080638</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.106784</td>\n",
       "      <td>-0.106808</td>\n",
       "      <td>-0.106806</td>\n",
       "      <td>-0.106769</td>\n",
       "      <td>-0.106650</td>\n",
       "      <td>-0.106318</td>\n",
       "      <td>-0.105575</td>\n",
       "      <td>-0.104291</td>\n",
       "      <td>-0.102514</td>\n",
       "      <td>-0.100429</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2 rows × 1025 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     励磁波形  0（磁通密度B，T）         1         2         3         4         5  \\\n",
       "1499  三角波   -0.087577 -0.085587 -0.083606 -0.081636 -0.079677 -0.077730   \n",
       "1500  三角波   -0.098222 -0.095992 -0.093769 -0.091558 -0.089360 -0.087172   \n",
       "\n",
       "             6         7         8  ...      1014      1015      1016  \\\n",
       "1499 -0.075791 -0.073854 -0.071920  ... -0.095125 -0.095154 -0.095161   \n",
       "1500 -0.084992 -0.082814 -0.080638  ... -0.106784 -0.106808 -0.106806   \n",
       "\n",
       "          1017      1018      1019      1020      1021      1022      1023  \n",
       "1499 -0.095139 -0.095047 -0.094765 -0.094117 -0.092983 -0.091402 -0.089545  \n",
       "1500 -0.106769 -0.106650 -0.106318 -0.105575 -0.104291 -0.102514 -0.100429  \n",
       "\n",
       "[2 rows x 1025 columns]"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "row_1500x_data.head(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 2 entries, 1499 to 1500\n",
      "Columns: 1025 entries, 励磁波形 to 1023\n",
      "dtypes: float64(1024), object(1)\n",
      "memory usage: 16.1+ KB\n"
     ]
    }
   ],
   "source": [
    "row_1500x_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "row_1500_data = dataframe_question_one.iloc[1500:1501, 2 :]  \n",
    "numeric_data_1500 = row_1500_data.apply(pd.to_numeric, errors='coerce')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>...</th>\n",
       "      <th>1014</th>\n",
       "      <th>1015</th>\n",
       "      <th>1016</th>\n",
       "      <th>1017</th>\n",
       "      <th>1018</th>\n",
       "      <th>1019</th>\n",
       "      <th>1020</th>\n",
       "      <th>1021</th>\n",
       "      <th>1022</th>\n",
       "      <th>1023</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1500</th>\n",
       "      <td>-0.095992</td>\n",
       "      <td>-0.093769</td>\n",
       "      <td>-0.091558</td>\n",
       "      <td>-0.08936</td>\n",
       "      <td>-0.087172</td>\n",
       "      <td>-0.084992</td>\n",
       "      <td>-0.082814</td>\n",
       "      <td>-0.080638</td>\n",
       "      <td>-0.078461</td>\n",
       "      <td>-0.076283</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.106784</td>\n",
       "      <td>-0.106808</td>\n",
       "      <td>-0.106806</td>\n",
       "      <td>-0.106769</td>\n",
       "      <td>-0.10665</td>\n",
       "      <td>-0.106318</td>\n",
       "      <td>-0.105575</td>\n",
       "      <td>-0.104291</td>\n",
       "      <td>-0.102514</td>\n",
       "      <td>-0.100429</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1 rows × 1023 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          1         2         3        4         5         6         7     \\\n",
       "1500 -0.095992 -0.093769 -0.091558 -0.08936 -0.087172 -0.084992 -0.082814   \n",
       "\n",
       "          8         9         10    ...      1014      1015      1016  \\\n",
       "1500 -0.080638 -0.078461 -0.076283  ... -0.106784 -0.106808 -0.106806   \n",
       "\n",
       "          1017     1018      1019      1020      1021      1022      1023  \n",
       "1500 -0.106769 -0.10665 -0.106318 -0.105575 -0.104291 -0.102514 -0.100429  \n",
       "\n",
       "[1 rows x 1023 columns]"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numeric_data_1500.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "row_1500_data = dataframe_question_one.loc[1500, dataframe_question_one.columns[2:]]\n",
    "# 将数据转换为数值型\n",
    "numeric_data_1500 = pd.to_numeric(row_1500_data, errors='coerce').to_numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.series.Series"
      ]
     },
     "execution_count": 192,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(row_1500_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAksAAAHFCAYAAADi7703AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAA9hAAAPYQGoP6dpAABkwUlEQVR4nO3dd1hT5/sG8PskkLADiExx763gAFx1V1tRa904qlarto5aO2y/jg5bf61dKo666q7btmqLo1YBxQHuLQooqCB7k5zfH5TUVERG4CTh/lxXrktO3pw8OaXm9j3veY4giqIIIiIiIiqUTOoCiIiIiAwZwxIRERFRERiWiIiIiIrAsERERERUBIYlIiIioiIwLBEREREVgWGJiIiIqAgMS0RERERFYFgiIiIiKgLDEpGJW7duHQRB0D7MzMzg5uaGoUOH4ubNm1KXh5iYGEyfPh2dO3eGvb09BEHAunXrCh3bpUsXnc9S8Ojdu/czY3NzczF//nzUrFkTSqUSDRs2xI8//ljofu/cuYOBAwfC3t4eNjY26NGjB86dO1es+p+uSSaTwdbWFnXr1sXrr7+OHTt2QKPRFPtY/NfmzZvx3Xfflfr1zzNv3jyd46dQKFCrVi1MmzYNSUlJ2nEFvzt3794t8Xvs378f8+bN01vNRFIyk7oAIqoYa9euRcOGDZGVlYXg4GB8/vnnOHr0KK5duwYHBwfJ6rp16xY2bdqEli1bok+fPtiyZUuR42vXro1NmzbpbLO3t39m3OTJk7FhwwZ8+umnaNOmDf744w9MmzYNqamp+Oijj7TjHj9+jI4dO8LBwQFr1qyBhYUFFi5ciC5duuD06dNo0KDBCz/D0zWlp6cjMjISe/bsweuvv46OHTvi119/hUqlKsbR0LV582ZcunQJ06dPL/Fri+PgwYNQqVRITU3F/v378f333yMsLAwhISEQBKFM+96/fz+WLl3KwESmQSQik7Z27VoRgHj69Gmd7fPnzxcBiGvWrJGosnxqtVr759OnT4sAxLVr1xY6tnPnzmKTJk1euM9Lly6JgiCIX3zxhc72CRMmiJaWlmJCQoJ223vvvSeam5uLd+/e1W5LTk4WnZycxMGDB7/wvYqqac2aNSKAYu2nMH379hVr1KhRqtcWZe7cuSIA8fHjxzrbAwICRADiiRMnRFH893cnMjKyxO8xZcoUkV8xZCp4Go6okvL29gYAPHz4UGf7vn374OPjAysrK9ja2qJHjx4IDQ3VPn/58mUIgoDt27drt509exaCIKBJkyY6++rXrx+8vLyKrEMm0/9fQ3v27IEoihg7dqzO9rFjxyIzMxMHDx7Ubtu9eze6du2KGjVqaLfZ2dlh4MCB+PXXX5GXl1fqOsaOHYs+ffpg+/btuHfvnnb70qVL0alTJzg7O8Pa2hrNmjXDokWLkJubqx3TpUsX/P7777h3757OKbMC8+fPR7t27eDo6Ag7Ozu0bt0aq1evhliGe6O3b98eAHRqLcyaNWvQokULWFhYwNHREQMGDMDVq1e1z48ZMwZLly4FAJ3aS3M6j8gQMCwRVVKRkZEAgPr162u3bd68Gf7+/rCzs8OWLVuwevVqJCYmokuXLjhx4gQAoEmTJnBzc8OhQ4e0rzt06BAsLS1x5coVPHjwAACQl5eHY8eOoXv37nqt+/bt23B0dISZmRnq1KmDOXPmIDMzU2fMpUuXULVqVbi6uupsb968ufZ5AMjMzMTt27e12/87NjMzE3fu3ClTvf369YMoijh+/LjOZxg+fDg2bNiA3377DePGjcP//d//YeLEidoxy5Ytg5+fH1xdXREaGqp9FLh79y4mTpyIX375Bbt27cLAgQPx9ttv49NPPy11rbdu3QIAVK1a9bljFi5ciHHjxqFJkybYtWsXvv/+e1y4cAE+Pj7aNXCffPIJBg0aBAA6tbu5uZW6NiIpcc0SUSWhVquRl5enXbP02WefoVOnTujXrx8AQKPR4L333kOzZs1w4MAB7YxPnz59UKdOHbz//vsIDg4GAHTr1u2ZsDRy5Ejs2LEDhw4dwqhRoxAWFoaUlBS9hqUOHTpgyJAhaNiwITIzM3HgwAEsWrQIJ06cwNGjR7U1JyQkwNHR8ZnXW1tbQ6FQICEhAQCQmJgIURQLHVuwrWBsaRXMWBWESABYvHix9s8ajQYdO3ZElSpVMHbsWHzzzTdwcHBA48aNYW9vD6VSqZ3xedratWt19tGlSxeIoojvv/8en3zySbHWHBX8TqSlpeH333/H8uXL4enpiY4dOxY6PikpCZ9++in69OmDzZs3a7d36dIF9erVw7x587Bp0ybUqVMHLi4uAFBo7UTGhmGJqJL475dWo0aNsHfvXpiZ5f81cP36dTx48ADTp0/XOTVmY2OD1157DStWrEBGRgasrKzQrVs3bNy4EZGRkXBzc8OJEyfw1ltvISEhAUFBQRg1ahQOHToEpVKJDh066O0zfPbZZzo/9+nTBzVr1sSsWbOwd+9eDBgwQPtcUWHhv8+VZGxJFXZaLDw8HHPnzkVwcDCePHmi89yNGzfQrl27F+73yJEj+OKLL3D69GmkpKToPPfo0SNtWCnKf2fe/Pz8sHLlSlhYWBQ6PjQ0FJmZmRgzZozOdk9PT3Tt2hWHDx9+4XsSGSOehiOqJH7++WecPn0aR44cwcSJE3H16lUMGzZM+3zBDEphp0rc3d2h0WiQmJgIANrZokOHDuHEiRPIzc1F165d0b17d+0X5qFDh+Dn5wdLS8ty/VwjR44EAJw8eVK7rUqVKoXOCKWnpyMnJ0c7a+Tg4ABBEAodWxBiCpt1KomC9T/u7u4AgKioKHTs2BH379/H999/j+PHj+P06dPaNT7/PaVYmLCwMPTs2RMAsGrVKgQHB+P06dOYM2dOsfcB5P83On36NCIiIhAfH48TJ06gcePGzx3/ot+Rss7CERkqziwRVRKNGjXSLup+6aWXoFar8dNPP2HHjh0YNGgQqlSpAgCIjY195rUPHjyATCbTthioVq0a6tevj0OHDqFmzZrw9vaGvb09unXrhsmTJ+PUqVM4efIk5s+fX2Gf7+nZsGbNmmHr1q2Ii4vTmT25ePEiAKBp06YAAEtLS9StW1e7/WkXL16EpaUlateuXaa69u3bB0EQ0KlTJwD5i8/T09Oxa9cunUXlERERxd7n1q1bYW5ujt9++01nFmjPnj0lqq1FixZwcnIq9vgX/Y6UZF9ExoQzS0SV1KJFi+Dg4ID//e9/0Gg0aNCgATw8PLB582adU0fp6enYuXOn9gq5At27d8eRI0cQFBSEHj16AMhfLF69enX873//Q25urt4Xdxdm/fr1AHRPM/r7+0MQBO1zBdatWwdLS0udJpYDBgzAkSNHEB0drd2WmpqKXbt2oV+/ftrTlKWxdu1aHDhwAMOGDUP16tUB/HtaT6lUaseJoohVq1Y983qlUlnoLFFBc1G5XK7dlpmZiQ0bNpS61uLw8fGBpaUlNm7cqLM9JiYGR44cQbdu3bTbCj5fcWe5iAwZZ5aIKikHBwd8+OGHmD17NjZv3oyRI0di0aJFGDFiBF555RVMnDgR2dnZ+L//+z8kJSXhyy+/1Hl9t27dsGzZMsTHx+t0me7WrRvWrl0LBweHF7YNKLBjxw4A0F55dubMGdjY2ACA9qqq48eP4/PPP8eAAQNQu3ZtZGVl4cCBA1i5ciW6du2KV199Vbu/Jk2aYNy4cZg7dy7kcjnatGmDP//8EytXrsRnn32mc2pt1qxZ2LBhA/r27YsFCxZAqVTiyy+/RFZWVrEbKmZmZmpPAxZcQbdnzx789ttv6Ny5M5YvX64d26NHDygUCgwbNgyzZ89GVlYWAgMDtac4n9asWTPs2rULgYGB8PLygkwmg7e3N/r27YvFixdj+PDhePPNN5GQkICvv/5aJ4CVB3t7e3zyySf46KOPMGrUKAwbNgwJCQmYP38+LCwsMHfuXJ3aAeCrr77Cyy+/DLlcjubNm0OhUJRrjUTlQroWT0RUEZ7XlFIURTEzM1OsXr26WK9ePTEvL08URVHcs2eP2K5dO9HCwkK0trYWu3XrJgYHBz/z2sTERFEmk4nW1tZiTk6OdvumTZtEAOLAgQOLXSOA5z4K3Lx5U+zTp4/o4eEhKpVK0cLCQmzWrJn4+eefi1lZWc/sMycnR5w7d65YvXp1UaFQiPXr1xd/+OGHQt//1q1bYv/+/UU7OzvRyspK7Natm3j27Nli1d65c2edeq2trcXatWuLgwYNErdv367TdLPAr7/+KrZo0UK0sLAQPTw8xPfee088cOCACEA8evSodtyTJ0/EQYMGifb29qIgCDrHY82aNWKDBg1EpVIp1q5dW1y4cKG4evXqYjWRfF5Tyv96XlPKn376SWzevLmoUChElUol+vv7i5cvX9YZk52dLY4fP16sWrWqtvbSNLckMgSCKJahgxkRERGRieOaJSIiIqIiMCwRERERFYFhiYiIiKgIDEtERERERWBYIiIiIioCwxIRERFREdiUUg80Gg0ePHgAW1vbMt90k4iIiCqGKIpITU2Fu7u7zi2T/othSQ8ePHgAT09PqcsgIiKiUoiOjka1atWe+zzDkh7Y2toCyD/YdnZ2EldDRERExZGSkgJPT0/t9/jzMCzpQcGpNzs7O4YlIiIiI/OiJTRc4E1ERERUBIYlIiIioiIwLBEREREVgWGJiIiIqAgMS0RERERFYFgiIiIiKgLDEhEREVERGJaIiIiIisCwRERERFQEhiUiIiKiIjAsERERERWBYYmIiIioCAxLpDcZOXnIydNIXQYREZFeMSyRXpy9lwifhUfQ9otDCL4VL3U5REREesOwRHrx1cFrSM7MRVJGLsauO83AREREJoNhicosOTMXZ+4+AQA0crNDTp4G49efwel/thERERkzhiUqs/CoRGhEoGYVK+yZ4ovO9asiM1eNsWtP49SdBKnLIyIiKhOGJSqza3GpAICmHioozeRYEeAF3zpVkJadh4A1YfjzcpzEFRIREZUewxKV2bXYFAD5p+AAwMJcjjVj2qB7Ixfk5GkwaeNZ/HImWsoSiYiISo1hicqsYGapoautdpuFuRzLR7bG617VoBGB2TsuYPmx21KVSEREVGoMS1QmOXka3H6cBgBo8FRYAgAzuQyLBjXHpM51AABfHriGL/ZfhSiKFV4nERFRaTEsUZncTUhHrlqEjdIMHvaWzzwvCAI+eLkh5vRpBABY+fcdzNp+AblqNq8kIiLjwLBEZXLnn1ml2lWtIQjCc8dN6FQbX7/eAnKZgJ3nYjB+/RmkZedVVJlERESlxrBEZXL7cToAoLaT9QvHDvKqhpUBXrA0l+PYjccYsiIUD1OyyrtEIiKiMmFYojK5UxCWqtoUa3y3Ri7Y+mZ7ONkocPlBCgYsDcaNh6nlWSIREVGZMCxRmdyJ//c0XHG18LTH7sl+qF3VGg+Ss/BaYAhCbvP2KEREZJiMLiwtW7YMtWrVgoWFBby8vHD8+PHnjo2NjcXw4cPRoEEDyGQyTJ8+vdBxO3fuROPGjaFUKtG4cWPs3r27nKo3PZHxBafhijezVMDT0Qq73vJFm5oOSM3Kw+g1YdgdHlMeJRIREZWJUYWlbdu2Yfr06ZgzZw7Cw8PRsWNHvPzyy4iKiip0fHZ2NqpWrYo5c+agRYsWhY4JDQ3FkCFDEBAQgPPnzyMgIACDBw/GqVOnyvOjmIQn6TlIysgFANQqxpql/7K3UmDDuHbo29wNuWoRM7adx5IjN9lagIiIDIogGtE3U7t27dC6dWsEBgZqtzVq1Aj9+/fHwoULi3xtly5d0LJlS3z33Xc624cMGYKUlBQcOHBAu613795wcHDAli1bilVXSkoKVCoVkpOTYWdnV/wPZOTO3H2CQctD4WFvieAPupZ6PxqNiK8OXsOKv+8AAIa19cSn/k1hJjeqLE9EREamuN/fRvNtlJOTg7Nnz6Jnz54623v27ImQkJBS7zc0NPSZffbq1avIfWZnZyMlJUXnURn9u7i75LNKT5PJBHzYpxEW+DeBTAC2hEVjHFsLEBGRgTCasBQfHw+1Wg0XFxed7S4uLoiLK/2NWuPi4kq8z4ULF0KlUmkfnp6epX5/Y3a7YHF3KU7BFWaUT02sCPCGhbmMrQWIiMhgGE1YKvDfxoeiKBbZDLE89vnhhx8iOTlZ+4iOrpw3iS1p24Di6NHYBVvf9GFrASIiMhhGE5acnJwgl8ufmfF59OjRMzNDJeHq6lrifSqVStjZ2ek8KqOnu3frU0tPe+x6yw+1ndhagIiIpGc0YUmhUMDLywtBQUE624OCguDr61vq/fr4+Dyzzz///LNM+6wM8tQaRD3JAKDfmaUC1atYYSdbCxARkQEwk7qAkpg5cyYCAgLg7e0NHx8frFy5ElFRUZg0aRKA/NNj9+/fx88//6x9TUREBAAgLS0Njx8/RkREBBQKBRo3bgwAmDZtGjp16oSvvvoK/v7+2Lt3Lw4dOoQTJ05U+OczJtGJmchVi7Awl8HNzqJc3sPBOr+1wLvbz+P3C7GYse087idmYspLdct86pWIiKi4jCosDRkyBAkJCViwYAFiY2PRtGlT7N+/HzVq1ACQ34Tyvz2XWrVqpf3z2bNnsXnzZtSoUQN3794FAPj6+mLr1q34+OOP8cknn6BOnTrYtm0b2rVrV2GfyxhF/rO4u2YVa8hk5RdcLMzl+HFoK3jYW2Ll33fw9Z83cD8pk60FiIiowhhVnyVDVRn7LK0NjsT8X6/g5aauCBzpVSHv+XPoXczbdxkaEehcvyqWjmgNG6VR5X0iIjIgJtdniQzLvYT89UrVHa0q7D3ZWoCIiKTAsESlEv3P4m7PCgxLwL+tBapYs7UAERFVDIYlKpWCK+FqVKnYsATktxbYPfk/rQVusbUAERGVD4YlKjFRFLVhqSJPwz2toLWAd4381gKj1oRh+5nK2RyUiIjKF8MSldjj1Gxk52kgEwB3e0vJ6nCwVmDj+HZ4tYU78jQi3ttxAd/8eR28ZoGIiPSJYYlKrGBWyd3eEuYSX75vYS7H90NaYspLdQAAPx65hWlbI5CVq5a0LiIiMh0MS1RiUp+C+y+ZTMB7vRpi0WvNYSYTsO/8AwSsPoUn6TlSl0ZERCaAYYlKzNDCUoHBbTyxbmxb2CrNcPpuIgYuC0ZkfLrUZRERkZFjWKISi5KobUBxdKjnhJ2TfeFhb4m7CRkYsCwYp+8+kbosIiIyYgxLVGJREjSkLIn6LrbYPcUXLaqpkJSRixGrTmFvxH2pyyIiIiPFsEQlZqin4Z7mbGuBrW/6oGdjF+SoNZi2NQI/Hr7JK+WIiKjEGJaoRDJz1HiUmg3AsMMSAFgq5Agc6YXxHWoBAL4JuoH3dlxATp5G4sqIiMiYMCxRicQk5s8q2VqYwd7KXOJqXkwuE/DxK43xaf+mkAnAjrMxGL0mDMkZuVKXRkRERoJhiUrk6VNwgiBIXE3xBbSvgdVj2sBaIUfonQQMCAzWrr0iIiIqCsMSlYgxrFd6npcaOGP7JF+4qSxw53E6+i8Lxtl7vFKOiIiKxrBEJWLMYQkAGrvbYc8UPzRxt8OT9BwMW3UKv55/IHVZRERkwBiWqESiDbjHUnG52Fngl4k+6N7IGTl5Gry9JRxLj97ilXJERFQohiUqEWOfWSpgrTTDigBvvOGXf6Xc//1xHbN5pRwRERWCYYmKTRRFkwlLQP6Vcv97tTHm92sCmQBsPxuDMWvDkJzJK+WIiOhfDEtUbI9Ts5GVq4FMANztLaUuR29G+9bET6O9YaWQI+R2Al4LDNGebiQiImJYomIrmFVyU1lCYWZavzpdG7pg+yQfuNpZ4NajNPRfGoxzUYlSl0VERAbAtL7xqFyZ0im4wjRxV2HPFD80drNDQnoOhq08id8u8Eo5IqLKjmGJiq0gLNWoYpphCQBcVRbYPskH3Ro6IztPg6mbeaUcEVFlx7BExRZlAm0DisNaaYaVo3SvlJu1nVfKERFVVgxLVGzRJn4a7mkFV8p96p9/pdzOczEIWH0Kiek5UpdGREQVjGGJis3U1ywVJsCnJtaMaQMbpRlORT7BwMAQRManS10WERFVIIYlKpasXDUepmQDqFxhCQC6NHDGjrd84GFvicj4dAxYFoyTdxKkLouIiCoIwxIVS0xi/qySrdIM9lbmEldT8Rq62mH3FF+08LRHUkYuAlafws6zMVKXRUREFYBhiYrl6cXdgiBIXI00nG0tsHVCe/Rp5opctYh3t5/H139ch0bDK+WIiEwZwxIVy72EyrdeqTCWCjmWDGuNyV3qAACWHL2Fd7aGIytXLXFlRERUXhiWqFi0i7tNuMdScclkAmb3bohFg5rDTCbgtwuxGLbqJB6nZktdGhERlQOGJSqW6ErSY6kkBnt74udxbaGyNEd4VBIGLAvGjYepUpdFRER6xrBExaLt3s2wpMO3jhN2TfZFjSpWiEnMxGvLQnD85mOpyyIiIj1iWKIXEkWxUvZYKq46VW2we7If2tZ0RGp2HsasPY1Np+5JXRYREekJwxK90OO0bGTlaiATAHd7S6nLMUiO1gpsGN8WA1p5QK0RMWf3JXz22xWoeaUcEZHRY1iiFypYr+SmsoTCjL8yz6M0k2Px4BaY2aM+AOCnE5GYtPEsMnLyJK6MiIjKgt989EI8BVd8giDgnW718P3QllCYyRB05SFeXx6KuOQsqUsjIqJSYliiF4pKyATAsFQS/i09sGVCO1SxVuDygxT0XxqMS/eTpS6LiIhKgWGJXujek/wbx7LHUsl41XDE7sl+qOtsg7iULAxeEYpDVx5KXRYREZUQwxK9EHsslV71KlbY+ZYvOtR1QkaOGhM2nMHqE5EQRS78JiIyFgxL9EJcs1Q2KktzrB3bBsPaekIUgU9/u4JP9l5CnlojdWlERFQMDEtUpKxcNR6m5N/Ggw0pS89cLsMXA5phTp9GEARg48kovLH+DFKycqUujYiIXoBhiYoUk5g/q2SrNIO9lbnE1Rg3QRAwoVNtLB/pBUtzOf6+8RiDAkO0pzmJiMgwMSxRkaKeWq8kCILE1ZiGXk1c8ctEHzjbKnHjYRoGLAtGeFSi1GUREdFzMCxRkaISuF6pPDSrpsLeqX5o5GaH+LQcDF15Er9fiJW6LCIiKgTDEhUp6sk/PZbYNkDv3FSW2D7JB10bOiM7T4Mpm89h6dFbvFKOiMjAMCxRkaLYNqBc2SjNsGqUN8b61QQA/N8f1/HejgvIyeOVckREhoJhiYoUzbYB5U4uEzD31SZY4N8EMgHYcTYGAatPISkjR+rSiIgIDEtUBFEU2WOpAo3yqYk1Y9rARmmGU5FPMHBZCCLj06Uui4io0mNYoud6nJaNzFw1BAHwsLeUupxKoUsDZ+x4ywce9pa4E5+OAcuCcepOgtRlERFVagxL9FwFp+DcVZZQmPFXpaI0dLXD7im+aFFNhaSMXIxcfQo7z8ZIXRYRUaXFb0B6Lp6Ck46zrQW2vumDPs1ckasW8e728/i/P65Bo+GVckREFY1hiZ4rKuGftgEMS5KwVMixZFhrTHmpDgBg6dHbmLrlHDJz1BJXRkRUuTAs0XNpZ5bYY0kyMpmA93o1xNevt4C5XMD+i3EYujIUj1KzpC6NiKjSYFii54pmjyWDMcirGjaOawd7K3Ocj0lG/yXBuBqbInVZRESVAsMSPRfXLBmWdrWrYM9kP9Suao0HyVkYFBiCI9ceSl0WEZHJY1iiQmXlqhGXkn+qh2HJcNR0ssbut/zgW6cK0nPUGL/+DNaciOQtUoiIyhHDEhUqJjF/VslGaQYHK3OJq6GnqazMsf6NthjW1hMaEVjw2xV8svcS8tS8RQoRUXlgWKJCPX1POEEQJK6G/stcLsMXA5phTp9GEARg48kojF13GilZuVKXRkRkchiWqFBRCQXrldi521AJgoAJnWpjxUgvWJrLcfxmPF5bFqJdmE9ERPrBsESFinrCHkvGomcTV2yf5ANXOwvcfJSG/kuDcfbeE6nLIiIyGQxLVKh/eyxZS1wJFUdTDxX2TPFDUw87JKTnYNiqU9gbcV/qsoiITALDEhUqmm0DjI6rygK/TPRBz8YuyMnTYNrWCCz+8zpvkUJEVEYMS/QMURTZY8lIWSnMsHykFyZ2rg0A+OHILby9NRxZubxFChFRaTEs0TPi03KQmauGIAAe9lzgbWxkMgEfvtwI/zeoOczlAn6/EIshK0/iUQpvkUJEVBoMS/SMglkld5UlFGb8FTFWr3t7/nuLlOgk+C8NxuUHyVKXRURkdIzum3DZsmWoVasWLCws4OXlhePHjxc5/tixY/Dy8oKFhQVq166N5cuX6zy/bt06CILwzCMrq/L+K/zfe8JxVsnYPX2LlNjkLLy+PBRBV3iLFCKikjCqsLRt2zZMnz4dc+bMQXh4ODp27IiXX34ZUVFRhY6PjIxEnz590LFjR4SHh+Ojjz7CO++8g507d+qMs7OzQ2xsrM7DwsKiIj6SQbqXwPVKpqTgFikd6johI0eNNzecwcq/b/MWKURExWRUYWnx4sUYN24cxo8fj0aNGuG7776Dp6cnAgMDCx2/fPlyVK9eHd999x0aNWqE8ePH44033sDXX3+tM04QBLi6uuo8KjMu7jY9KitzrB3bBiPaVYcoAl/sv4YPdl5ETh5vkUJE9CJGE5ZycnJw9uxZ9OzZU2d7z549ERISUuhrQkNDnxnfq1cvnDlzBrm5/94WIi0tDTVq1EC1atXwyiuvIDw8vMhasrOzkZKSovMwJdFP3eqETIe5XIbP+jfF3FcbQyYA285EI2D1KSSm50hdGhGRQTOasBQfHw+1Wg0XFxed7S4uLoiLiyv0NXFxcYWOz8vLQ3x8PACgYcOGWLduHfbt24ctW7bAwsICfn5+uHnz5nNrWbhwIVQqlfbh6elZxk9nWDizZLoEQcBYv1pYPaYNbJRmOBX5BAOWBeP24zSpSyMiMlhGE5YK/PemrqIoFnmj18LGP729ffv2GDlyJFq0aIGOHTvil19+Qf369fHjjz8+d58ffvghkpOTtY/o6OjSfhyDk5WrRtw/l5jXYPduk/VSA2fsfMsXHvaWuJuQgQFLgxF8K17qsoiIDJLRhCUnJyfI5fJnZpEePXr0zOxRAVdX10LHm5mZoUqVKoW+RiaToU2bNkXOLCmVStjZ2ek8TEVMYv494WyUZnCwMpe4GipPDVxtsXeqH7xqOCAlKw+j1oRh06l7UpdFRGRwjCYsKRQKeHl5ISgoSGd7UFAQfH19C32Nj4/PM+P//PNPeHt7w9y88CAgiiIiIiLg5uamn8KNzNPrlYqasSPT4GSjxKbx7dC/pTvUGhFzdl/Cgl+vQM1bpBARaRlNWAKAmTNn4qeffsKaNWtw9epVzJgxA1FRUZg0aRKA/NNjo0aN0o6fNGkS7t27h5kzZ+Lq1atYs2YNVq9ejVmzZmnHzJ8/H3/88Qfu3LmDiIgIjBs3DhEREdp9Vjb/rldij6XKwsJcjm+HtMS7PeoDANYER2LCz2eQmpX7glcSEVUOZlIXUBJDhgxBQkICFixYgNjYWDRt2hT79+9HjRo1AACxsbE6PZdq1aqF/fv3Y8aMGVi6dCnc3d3xww8/4LXXXtOOSUpKwptvvom4uDioVCq0atUKf//9N9q2bVvhn88QcHF35SQIAt7uVg+1q9pg5i8ROHLtEQYFhuKn0d68KpKIKj1BZGe6MktJSYFKpUJycrLRr1+a8PMZBF15iE/9myDAp6bU5ZAEzkcnYfzPZ/A4NRtVrBVYOcoLXjUcpS6LiEjvivv9bVSn4aj8RSWwx1Jl18LTHnun+KGxmx0S0nMwbOUp7Am/L3VZRESSYVgiLVEUeRqOAADu9pbYPskHPRq7IEetwfRtEfjmz+vQcOE3EVVCDEukFZ+Wg8xcNQQB8HDgAu/KzlpphhUjvTCxc20AwI9HbmHK5nPIyMmTuDIioorFsERaBbNK7ipLKM3kEldDhkAmE/Dhy43wf4Oaw1wu4MClOLy+PBSxyZlSl0ZEVGEYlkjr3x5LnFUiXa97e2LzhPZwtFbg8oMU9FsSjPCoRKnLIiKqEAxLpMX1SlSUNjUdsXeKHxq42OJxajaGrDyJvRFc+E1Epo9hibQYluhFPB2tsHOyL7o3ckZOngbTtkbg6z+48JuITBvDEmlFPWHbAHoxG6UZVgR4axd+Lzl6C29tOov0bC78JiLTxLBEWtGcWaJikv+z8Pvr11tAIZfhj8sPMWh5KO4nceE3EZkehiUCAGTlqhGXkgWAYYmKb5BXNWx5sx2cbBS4GpsC/yXBOHuPC7+JyLQwLBEAICYxE6IIWCvkcLRWSF0OGRGvGo7YM8UPDV1tEZ+WjWGrTmJ3eIzUZRER6Q3DEgF4um2AFQRBkLgaMjbVHKyw8y3f/I7feRrM2HYeXx28xoXfRGQSGJYIAK+Eo7Ir6Pj9Vpc6AIDAv25j4kYu/CYi48ewRAD+DUs1qjAsUenJZALe790Q3w5pAYWZDEFXHuK1wBDEJGZIXRoRUakxLBEAziyRfg1oVQ1bJrSHk40C1+JS0X9pMM7eeyJ1WUREpcKwRAB01ywR6YNXDQfsndoBjdzsEJ+Wg2ErT2HnWS78JiLjw7BEEEWRM0tULjzsLbFjkg96NXFBjlqDd7efx8IDV6Hmwm8iMiIMS4SE9Bxk5KghCICHA2+iS/plrTRD4AgvTH2pLgBgxbE7mLjhDNK48JuIjATDEmlnldzsLKA0k0tcDZkimUzArF4N8P3QllCYyXDo6iMMCgzRnv4lIjJkDEvE9UpUYfxbemDbm+1R1VapXfh9+i4XfhORYWNYIkQlMCxRxWlV3QF7p/ihibsdEtJzMHzVSWw/Ey11WUREz8WwRIhO5OJuqlju9pbYPskHLzd1Ra5axHs7LuCL/Vz4TUSGiWGJeCUcScJKYYalw1vjna75C79X/n0Hb/58BqlZuRJXRkSki2GJEP0kEwBPw1HFk8kEzOzZAD8MawWlmQyHrz3Ca1z4TUQGhmGpksvJ0+BBckFYYtsAkka/Fu7YNtEHzrZK3HiYBv+lwQiL5MJvIjIMDEuV3IOkTIgiYGEuQ1UbpdTlUCXW0tMe+6Z2QDMPFZ6k52DETyfxy2ku/CYi6TEsVXJPr1cSBEHiaqiyc1VZ4JeJPujbzA25ahGzd17AZ79d4cJvIpIUw1IlVxCWPB24XokMg6VCjh+HtcK0bvUAAD+diMT49ae58JuIJMOwVMmxISUZIplMwIwe9bFkeP7C76PXH2PgshBtTzAioorEsFTJsccSGbJXmrtj+yQfuNgpcfNRGvyXnsDJOwlSl0VElQzDUiXHHktk6JpXy1/43byaCokZuRj50ylsDYuSuiwiqkQYlio53uqEjIGLnQW2vemDV5q7IU8j4oNdF7Hg1yvIU2ukLo2IKgGGpUosOSMXKVl5ANhjiQxfwcLvmT3qAwDWBEdi3PozSOHCbyIqZwxLlVjBeiUnGyWsFGYSV0P0YoIg4J1u9bBsRGtYmMtw7Eb+wu97CelSl0ZEJoxhqRL7d70SZ5XIuPRp5obtE33hameBW4/yO36H3ubCbyIqHwxLlVgU2waQEWtWTYV9U/3QopoKSRm5CFh9CptPceE3Eekfw1IlxivhyNg521lg20Qf9GvhjjyNiI92X8S8fZe58JuI9IphqRJjQ0oyBRbmcnw/tCVm9cxf+L0u5C7eWH8GyZlc+E1E+sGwVIlFc2aJTIQgCJjatR4CR7SGpbkcf994jAHLghEZz4XfRFR2DEuVlFojIiYxEwBnlsh0vNzMDdsn+cBNZYE7j9PRf2kwQm7FS10WERk5hqVKKjY5E3kaEeZyAa52FlKXQ6Q3TT1U2DvVDy097ZGcmYuANWHYePKe1GURkRFjWKqkop/kzypVc7CCXCZIXA2RfjnbWmDrm+3Rv6U71BoRH++5hLl7L3HhNxGVCsNSJcXF3WTqLMzl+HZIS7zXqwEAYH3oPYxZexrJGVz4TUQlw7BUSWl7LDmwISWZLkEQMOWlulgR4AUrhRwnbsVjwLJg3HmcJnVpRGREGJYqqYJbnfBKOKoMejVxxY5JvnBXWeBOfP7C7xM3ufCbiIqHYamSYkNKqmwau9th79QOaF3dHilZeRi9NgwbQu9KXRYRGQGGpUqKa5aoMqpqq8TmCe0xsJUH1BoRn+y9jI/3XEQuF34TUREYliqh9Ow8xKflAGBYosrHwlyObwa3wPu9G0IQgI0nozBmbRiSMnKkLo2IDFSJw1J0dDRiYmK0P4eFhWH69OlYuXKlXguj8lPQjFJlaQ6VpbnE1RBVPEEQ8FaXOlgZ4A0rhRzBtxIwYFkIbnPhNxEVosRhafjw4Th69CgAIC4uDj169EBYWBg++ugjLFiwQO8Fkv5xvRJRvh6NXbDzLV942Fsi8p+F33/feCx1WURkYEocli5duoS2bdsCAH755Rc0bdoUISEh2Lx5M9atW6fv+qgcMCwR/auRmx32TvWDdw0HpGblYey601gfcheiKEpdGhEZiBKHpdzcXCiVSgDAoUOH0K9fPwBAw4YNERsbq9/qqFwULO6u5sgeS0QA4GSjxKYJ7fBa62pQa0TM3XcZH++5xIXfRASgFGGpSZMmWL58OY4fP46goCD07t0bAPDgwQNUqVJF7wWS/kVzZonoGUozOb5+vTk+fDl/4femU1EYtToMielc+E1U2ZU4LH311VdYsWIFunTpgmHDhqFFixYAgH379mlPz5Fh42k4osIJgoCJnetgVYA3rBVyhN5JQP9lwbj1KFXq0ohIQoJYihPzarUaKSkpcHBw0G67e/curKys4OzsrNcCjUFKSgpUKhWSk5NhZ2cndTlFEkURDT85iOw8DY691wU1qlhLXRKRQboWl4Lx688gJjETtkozLBnRGp3rV5W6LCLSo+J+f5eqz5Ioijh79ixWrFiB1NT8f3EpFApYWXGmwtA9Ts1Gdp4GMgFwt+eaJaLnaehqh71T/NC2piNSs/Mwdm0Y1pyI5MJvokqoxGHp3r17aNasGfz9/TFlyhQ8fpx/me2iRYswa9YsvRdI+lVwTzg3lSXM5exJSlSUKjZKbBzfDq97VYNGBBb8dgUf7b6InDwu/CaqTEr8bTlt2jR4e3sjMTERlpb/zkwMGDAAhw8f1mtxpH9cr0RUMgozGRYNao45fRpBEIAtYdEIWH2KC7+JKpESh6UTJ07g448/hkKh0Nleo0YN3L9/X2+FUfmISsjv3s2wRFR8giBgQqfaWDO6DWyUZjgV+QT+S4Nx8yEXfhNVBiUOSxqNBmq1+pntMTExsLW11UtRVH6itDfQ5XolopJ6qaEzdk32haejJaKeZGDgshAcvf5I6rKIqJyVOCz16NED3333nfZnQRCQlpaGuXPnok+fPvqsjcpBwZol3kCXqHTqu9hi75QOaFsrf+H3uHWn8dPxO1z4TWTCShyWvv32Wxw7dgyNGzdGVlYWhg8fjpo1a+L+/fv46quvyqNG0iM2pCQqO0drBTaOa4ch3p7QiMBnv1/FBzu58JvIVJmV9AXu7u6IiIjAli1bcO7cOWg0GowbNw4jRozQWfBNhicrV424lCwADEtEZaUwk+HL15qhvqstPv/9CradiUZkQjqWj/SCo7XixTsgIqNRqqaUpMtYmlLefpyGbt8cg5VCjsvze0EQBKlLIjIJR68/wjubw5GanQdPR0usHt0G9V24hpPI0BX3+7vEM0s///xzkc+PGjWqpLukCvL0KTgGJSL9eamBM3ZP8cUb685oF37/MKwlujZ0kbo0ItKDEoeladOm6fycm5uLjIwMbQdvhiXDFf2Ei7uJyktdZ1vsneKHtzadxck7TzBu/Rl89HIjjO9Yi/84ITJyJV7gnZiYqPNIS0vD9evX0aFDB2zZsqU8atSxbNky1KpVCxYWFvDy8sLx48eLHH/s2DF4eXnBwsICtWvXxvLly58Zs3PnTjRu3BhKpRKNGzfG7t27y6t8SbEhJVH5crBW4Oc32mFY2+oQReDz/Vcxe8cFZOc9226FiIyHXu53Ua9ePXz55ZfPzDrp27Zt2zB9+nTMmTMH4eHh6NixI15++WVERUUVOj4yMhJ9+vRBx44dER4ejo8++gjvvPMOdu7cqR0TGhqKIUOGICAgAOfPn0dAQAAGDx6MU6dOletnkYK2x5IDF+ITlReFmQxfDGiKua82hkwAtp+NwcifTiEhLVvq0oiolPS2wDs8PBydO3dGSkqKPnZXqHbt2qF169YIDAzUbmvUqBH69++PhQsXPjP+/fffx759+3D16lXttkmTJuH8+fMIDQ0FAAwZMgQpKSk4cOCAdkzv3r3h4OBQ7JkyY1ng3ef747gSm4I1Y7y5loKoAhy78RhTN59DalYeqjnkL/xu4MqF30SGotwWeO/bt0/nZ1EUERsbiyVLlsDPz6/klRZTTk4Ozp49iw8++EBne8+ePRESElLoa0JDQ9GzZ0+dbb169cLq1auRm5sLc3NzhIaGYsaMGc+MebrxpikQRZE9logqWOf6VbF7sh/Grz+NuwkZGLgsGD8Ma4VujfiPFSJjUuKw1L9/f52fBUFA1apV0bVrV3zzzTf6qusZ8fHxUKvVcHHR/UvGxcUFcXFxhb4mLi6u0PF5eXmIj4+Hm5vbc8c8b58AkJ2djezsf6fUy3M2TV+SMnKRmp0HAKjmwLBEVFHqOttgzxQ/TN50DiG3EzD+5zP4oHdDvNmpNhd+ExmJUt0b7umHWq1GXFwcNm/eDDc3t/KoUcd//3IRRbHIv3AKG//f7SXd58KFC6FSqbQPT0/PYtcvlYLbnDjbKmFhLpe4GqLKxd5KgfVvtMWIdvkLvxceuIZZ27nwm8hY6GWBd0VwcnKCXC5/Zsbn0aNHz8wMFXB1dS10vJmZGapUqVLkmOftEwA+/PBDJCcnax/R0dGl+UgVilfCEUnLXC7DZ/2bYn6/JpDLBOw8F4Phq04hngu/iQxesU7DzZw5s9g7XLx4camLKYpCoYCXlxeCgoIwYMAA7fagoCD4+/sX+hofHx/8+uuvOtv+/PNPeHt7w9zcXDsmKChIZ93Sn3/+CV9f3+fWolQqoVQqy/JxKhzDEpH0BEHAaN+aqF3VGpM3ncPZe4nwXxKMlaO80MRdJXV5RPQcxQpL4eHhxdpZeZ9/nzlzJgICAuDt7Q0fHx+sXLkSUVFRmDRpEoD8GZ/79+9ru4xPmjQJS5YswcyZMzFhwgSEhoZi9erVOle5TZs2DZ06dcJXX30Ff39/7N27F4cOHcKJEyfK9bNUNDakJDIcHetVxZ4pfpiw/gzuxKdjUGAoFg9ugZeblf9SBiIquWKFpaNHj5Z3HcUyZMgQJCQkYMGCBYiNjUXTpk2xf/9+1KhRAwAQGxur03OpVq1a2L9/P2bMmIGlS5fC3d0dP/zwA1577TXtGF9fX2zduhUff/wxPvnkE9SpUwfbtm1Du3btKvzzlafoJ5kAGJaIDEWdqjbYPdkPU7ecw/Gb8Xhr0zlM714P73StB5mMC7+JDAlvpKsHxtBnqdOio4h6koFfJvqgbS1Hqcshon/kqTVYeOAaVp+IBAD0aeaKr19vAStFiS9WJqISKrc+SwBw+vRpbN++HVFRUcjJydF5bteuXaXZJZWjPLUG95PyZ5a4ZonIsJjJZfjklcZo4GKLOXsuYv/FONyNz8Cq0d7wsGe3fSJDUOKr4bZu3Qo/Pz9cuXIFu3fvRm5uLq5cuYIjR45ApeICRUMUm5wFtUaEwkwGZ1vjWphOVFkMbuOJLRPaw8lGgSuxKfBfcgJn7j6RuiwiQinC0hdffIFvv/0Wv/32GxQKBb7//ntcvXoVgwcPRvXq1cujRiqjgsXd1RwsuRaCyIB513TE3qkd0MjNDvFpORi26iR+OWP4rUmITF2Jw9Lt27fRt29fAPmX0Kenp0MQBMyYMQMrV67Ue4FUdmwbQGQ8POwtsfMtH7zc1BW5ahGzd1zAp79dQZ5aI3VpRJVWicOSo6MjUlNTAQAeHh64dOkSACApKQkZGRn6rY70gmGJyLhYKcywdHhrTO9eDwCw+kQk3lh/BsmZuRJXRlQ5FTssRUREAAA6duyIoKAgAMDgwYMxbdo0TJgwAcOGDUO3bt3KpUgqG4YlIuMjkwmY3r0+lo1oDUtzOf6+8RgDlgbj9uM0qUsjqnSKHZZat24NLy8vNGrUCMOGDQOQ3wRy1qxZePjwIQYOHIjVq1eXW6FUetGJ+VfC8Qa6RManTzM37HjLBx72lrgTn47+S4Nx7MZjqcsiqlSKHZaCg4PRunVrfP3116hTpw5GjhyJY8eOYfbs2di3bx8WL14MBweH8qyVSimaM0tERq2Juwp7p/rBu4YDUrPyMHZtGH46fgdsk0dUMYodlnx8fLBq1SrExcUhMDAQMTEx6N69O+rUqYPPP/8cMTEx5VknlVJqVi6epOf3wvJ0ZM8WImPlZKPEpgntMNi7GjQi8NnvV/HejgvIzlNLXRqRySvxAm9LS0uMHj0af/31F27cuIFhw4ZhxYoVqFWrFvr06VMeNVIZFNzmxNFaAVsLc4mrIaKyUJrJ8dVrzfG/VxpDJgA7zsZg+KpTeJyaLXVpRCatxGHpaXXq1MEHH3yAOXPmwM7ODn/88Ye+6iI9iU785wa6DpxVIjIFgiDgjQ61sG5sW9hZmOHsvUT0W3ICl+4nS10akckqdVg6duwYRo8eDVdXV8yePRsDBw5EcHCwPmsjPShYr8Qb6BKZlk71q2LPFD/UrmqN2OQsDFoegt8uPJC6LCKTVKKwFB0djU8//RR16tTBSy+9hNu3b+PHH3/EgwcPsGrVKrRv37686qRSYtsAItNVu6oN9kzxQ+f6VZGVq8HUzeFY/Od1aDRc+E2kT8W+kW6PHj1w9OhRVK1aFaNGjcIbb7yBBg0alGdtpAcMS0Smzc7CHGvGtMGXB65i1fFI/HDkFq4/TMXiwS1hrSzVvdKJ6D+K/X+SpaUldu7ciVdeeQVyubw8ayI94mk4ItMnlwmY07cxGrja4aNdF/HH5Yd4LTAEq0Z58/99Ij0o9mm4ffv2wd/fn0HJiGg0orYhJWeWiEzfIK9q2PJmezjZKHEtLhX+S4Nx6k6C1GURGb0yXQ1Hhu1RajZy8jSQywS4qSykLoeIKoBXDQf8+rYfmnrY4Ul6Dkb8dApbwqKkLovIqDEsmbCCtgEe9pYwk/M/NVFl4aayxPaJvniluRvyNCI+3HURc/deQq5aI3VpREaJ36AmLCqhYL0SeywRVTaWCjl+HNYKs3rWBwCsD72H0WvCkJSRI3FlRMaHYcmE8Uo4ospNEARM7VoPKwK8YKWQI+R2AvyXBuPmw1SpSyMyKgxLJoxXwhERAPRq4opdk31RzcES9xIyMGBZCI5ceyh1WURGg2HJhBWsWeLMEhE1dLXD3il+aFvLEWnZeRi3/gyWH7sNUWQDS6IXYVgyYQWn4TwdGJaICKhio8TGce0wvF11iCLw5YFrmPnLeWTlqqUujcigMSyZqKxcNR6m5N+JnDNLRFRAYSbD5/2bYoF/E8hlAnaH38eQlSfxMCVL6tKIDBbDkomK+ecUnK3SDPZW5hJXQ0SGRBAEjPKpiQ1vtIXK0hzno5PQb8kJXIhJkro0IoPEsGSiop/kd+72dLSCIAgSV0NEhsi3rhP2TfVDXWcbPEzJxuvLQ7E34r7UZREZHIYlE6Vdr8QeS0RUhBpVrLF7si+6NnRGdp4G07ZG4P/+uAaNhgu/iQowLJko9lgiouKytTDHqlHemNi5NgBg6dHbmLjxLNKy8ySujMgwMCyZKIYlIioJuUzAhy83wuLBLaAwkyHoykO8tixE26+NqDJjWDJRbEhJRKUxsHU1bHuzParaKnH9YSr6LTmBk3cSpC6LSFIMSyZIFEWGJSIqtVbVHbBvqh+aeaiQmJGLkT+dwqZT96Qui0gyDEsm6El6DtJz1BAEwMOeC7yJqOTcVJbYPskHr7ZwR55GxJzdl/C/vZeQq9ZIXRpRhWNYMkEF65Vc7SxgYS6XuBoiMlYW5nL8MLQlZvWsDwD4OfQeRq8JQ1JGjsSVEVUshiUTFJ34b48lIqKyEAQBU7vWw8oAL1gp5Ai5nQD/pcG4+TBV6tKIKgzDkgmK5j3hiEjPejZxxa7JvqjmYIl7CRkYsCwER689krosogrBsGSCohLYNoCI9K+hqx32TvFD21qOSMvOwxvrT2PFsdsQRTawJNPGsGSCtD2WqnBxNxHpVxUbJTaOa4dhbatDFIGFB67h3V/OIytXLXVpROWGYckERSfyNBwRlR+FmQxfDGiK+f2aQC4TsCv8PoauPIlHKVlSl0ZULhiWTEyuWoMHSfkLvHkajojKiyAIGO1bEz+/0RYqS3NERCeh35JgXIxJlro0Ir1jWDIxD5IyoREBpZkMVW2VUpdDRCbOr64T9kzxQ52q1ohLycLrK0Lw6/kHUpdFpFcMSyYm+sm/s0qCIEhcDRFVBrWcrLF7ih9ealAVWbkavL0lHF//cR0aDRd+k2lgWDIxUbzNCRFJwM7CHD+NboM3O9UGACw5eguTNp5FenaexJURlR3DkonRXgnHsEREFUwuE/BRn0b4+vUWUMhl+PPKQ7wWGKLt/UZkrBiWTAxvoEtEUhvkVQ1bJ7aHk40S1+JS4b80GKfuJEhdFlGpMSyZmIK2AZxZIiIpta7ugF/f9kNTDzs8Sc/BiJ9OYUtYlNRlEZUKw5KJ+XfNEhtSEpG03FSW2D7RF32buyFPI+LDXRcxb99l5Kk1UpdGVCIMSyYkOTMXSRm5ANiQkogMg6VCjiXDWuHdHvUBAOtC7mLM2tNIysiRuDKi4mNYMiEF65WcbBSwVppJXA0RUT5BEPB2t3pYPtILVgo5TtyKR/+lwbj1KFXq0oiKhWHJhMQkcnE3ERmu3k1dsfMtX3jYW+JuQgYGLA3B0euPpC6L6IUYlkyIdr0ST8ERkYFq5GaHvVP90LamI1Kz8zBu3Wms/Ps2RJENLMlwMSyZEPZYIiJj4GSjxMbx7TC0jSc0IvDF/mt4d/t5ZOWqpS6NqFAMSyYk6glvoEtExkFhJsPCgc0w79XGkMsE7Dp3H0NXnsSjlCypSyN6BsOSCYlhQ0oiMiKCIGCMXy2sH9sWKktzREQnod+SYFyISZK6NCIdDEsmQq0REZOYP7PEHktEZEw61HPC3il+qOtsg7iULLy+PBR7I+5LXRaRFsOSiXiYkoUctQZmMgFuKoYlIjIuNZ2ssWuyL7o2dEZ2ngbTtkZg0cFr0Gi48Jukx7BkIgoWd1dzsIRcJkhcDRFRydlZmGPVKG9M6lwHALDsr9t4c8MZpGblSlwZVXYMSyaCN9AlIlMglwn44OWG+G5ISyjMZDh09RFeCwzBvYR0qUujSoxhyUQwLBGRKenfygO/TPSBs60SNx6mwX9pMEJuxUtdFlVSDEsmgj2WiMjUtPS0x69vd0CLaiokZeQiYE0Yfg69ywaWVOEYlkwEwxIRmSIXOwtsm+iD/i3dodaI+N/ey5iz5xJy8jRSl0aVCMOSiYhOZENKIjJNFuZyfDukJT54uSEEAdh8KgojV59CQlq21KVRJcGwZAIyc9R4nJr/lwbvC0dEpkgQBEzqXAerR3vDRmmGsMgn6LckGFdjU6QujSoBhiUTEJ2YfwrOzsIMKitziashIio/XRu6YM8UX9SsYoX7SZl4LTAEBy/FSV0WmTiGJRMQlfDPeqUqnFUiItNX19kWe6b4oUNdJ2TkqDFp41n8cPgmF35TuWFYMgEFM0tcr0RElYW9lQLrxrbBGN+aAIDFQTcwdXM4MnLypC2MTBLDkgkouBKO65WIqDIxk8swr18TfDmwGczlAn6/GItBgaG4n5QpdWlkYhiWTAAbUhJRZTa0bXVsntAeVawVuBKbAv8lJ3Dm7hOpyyITYjRhKTExEQEBAVCpVFCpVAgICEBSUlKRrxFFEfPmzYO7uzssLS3RpUsXXL58WWdMly5dIAiCzmPo0KHl+En0L/oJ2wYQUeXWpqYj9k71QyM3O8Sn5WDYqpP45XS01GWRiTCasDR8+HBERETg4MGDOHjwICIiIhAQEFDkaxYtWoTFixdjyZIlOH36NFxdXdGjRw+kpqbqjJswYQJiY2O1jxUrVpTnR9ErURTZkJKICEA1ByvsfMsHLzd1Ra5axOydFzD/18vIU7OBJZWNUYSlq1ev4uDBg/jpp5/g4+MDHx8frFq1Cr/99huuX79e6GtEUcR3332HOXPmYODAgWjatCnWr1+PjIwMbN68WWeslZUVXF1dtQ+VSlURH0sv4tNykJmrhiAA7vaWUpdDRCQpK4UZlg5vjRnd6wMA1gbfxdh1p5GckStxZWTMjCIshYaGQqVSoV27dtpt7du3h0qlQkhISKGviYyMRFxcHHr27KndplQq0blz52des2nTJjg5OaFJkyaYNWvWMzNP/5WdnY2UlBSdh1QKZpXcVZZQmBnFf04ionIlkwmY1r0eAke0hqW5HMdvxsN/6QncelT03+1Ez2MU365xcXFwdnZ+ZruzszPi4gpvRlaw3cXFRWe7i4uLzmtGjBiBLVu24K+//sInn3yCnTt3YuDAgUXWs3DhQu3aKZVKBU9Pz5J+JL2JSSxY3M1ZJSKip73czA073/KFh70l7iZkYMDSEBy99kjqssgISRqW5s2b98zi6v8+zpw5AyC/1f1/iaJY6Pan/ff5/75mwoQJ6N69O5o2bYqhQ4dix44dOHToEM6dO/fcfX744YdITk7WPqKjpVtEqG1IyfVKRETPaOxuh71T/dC2piNSs/PwxvrTWHHsNhtYUomYSfnmU6dOfeGVZzVr1sSFCxfw8OHDZ557/PjxMzNHBVxdXQHkzzC5ublptz969Oi5rwGA1q1bw9zcHDdv3kTr1q0LHaNUKqFUKousu6KwxxIRUdGcbJTYOL4d5u67hC1h0Vh44Bqux6Xii4HNYGEul7o8MgKShiUnJyc4OTm9cJyPjw+Sk5MRFhaGtm3bAgBOnTqF5ORk+Pr6FvqaWrVqwdXVFUFBQWjVqhUAICcnB8eOHcNXX3313Pe6fPkycnNzdQKWIdNeCcdbnRARPZfCTIYvBjRDQ1c7LPjtCnaF38ft+HSsDPCCi52F1OWRgTOKNUuNGjVC7969MWHCBJw8eRInT57EhAkT8Morr6BBgwbacQ0bNsTu3bsB5J9+mz59Or744gvs3r0bly5dwpgxY2BlZYXhw4cDAG7fvo0FCxbgzJkzuHv3Lvbv34/XX38drVq1gp+fnySftaRiEvN7LLEhJRFR0QRBwGjfmvj5jbZQWZrjfHQS+i05gfPRSVKXRgbOKMISkH/FWrNmzdCzZ0/07NkTzZs3x4YNG3TGXL9+HcnJydqfZ8+ejenTp2Py5Mnw9vbG/fv38eeff8LW1hYAoFAocPjwYfTq1QsNGjTAO++8g549e+LQoUOQyw1/ajYnT4MHyWxISURUEn51nbBvqh/qOtvgYUo2Bq8Ixd6I+1KXRQZMELnKrcxSUlKgUqmQnJwMOzu7CnvfyPh0vPT1X7A0l+PKgl4vXOxORET/Ss3KxbStETjyzxVyb3Wpg1k9G0Au49+llUVxv7+NZmaJnvV0524GJSKikrG1MMeqUd54q0sdAEDgX7fx5s9nkJrFBpaki2HJiPEGukREZSOXCXi/d0N8P7QllGYyHL72CAOWheBufLrUpZEBYVgyYtG8JxwRkV74t/TALxN94GKnxK1HafBfGozgW/FSl0UGgmHJiGl7LLF7NxFRmbXwtMe+qR3QwtMeyZm5GLUmDOtD7rKBJTEsGbMoziwREemVi50Ftr3ZHgNbeUCtETF332V8tPsicvI0UpdGEmJYMmI8DUdEpH8W5nJ8M7gFPny5IQQB2BIWjZE/nUJCWrbUpZFEGJaMVHJGLlKy8gAA1XirEyIivRIEARM718Ga0W1gqzRD2N0n6LckGFcepEhdGkmAYclIFZyCq2qrhKXC8BtoEhEZo5caOmP3FF/UrGKF+0mZeC0wBAcvxUpdFlUwhiUjxfVKREQVo66zLfZO6YAOdZ2QmavGpI3n8P2hm9BouPC7smBYMlLRiQxLREQVRWVljnVj22CsX00AwLeHbmDqlnPIyMmTtjCqEAxLRiqKDSmJiCqUmVyGua82wVevNYO5XMD+i3F4LTAUMf/845VMF8OSkdJ273ZgjyUiooo0pE11bJnQHk42ClyNTYH/kmCcvvtE6rKoHDEsGSm2DSAiko53TUfsndoBjd3skJCeg+GrTmLb6Sipy6JywrBkhNQaETGJmQCA6lUYloiIpOBhb4kdb/mgTzNX5KpFvL/zIubtu4w8NRtYmhqGJSMUm5yJPI0IhVwGF1sLqcshIqq0rBRmWDq8NWb2qA8AWBdyF2PWnkZSRo7ElZE+MSwZoYLF3dUcLCGTCRJXQ0RUuQmCgHe61cPyka1haS7HiVvx6L80GLcepUpdGukJw5IRinmSfwquGtcrEREZjN5N3bDzLV942FvibkIG+i8NwZFrD6Uui/SAYckI/duQklfCEREZksbudtg31Q9tazkiLTsP49afwfJjtyGKbGBpzBiWjBAbUhIRGa4qNkpsHNcOw9pWhygCXx64hpm/nEdWrlrq0qiUGJaMkLYhJW+gS0RkkBRmMnwxoCkW+DeBXCZgd/h9DFl5Eg9TsqQujUqBYckIRf+zZondu4mIDJcgCBjlUxMb3mgLeytznI9Owqs/nkBEdJLUpVEJMSwZmYycPMSnZQNgWCIiMga+dZ2wd4of6jnb4FFqNgavCMWe8PtSl0UlwLBkZAqaUdpZmEFlaS5xNUREVBw1qlhj12RfdG/kjJw8DaZvi8CXB65BreHCb2PAsGRktLc5YeduIiKjYmthjhUB3pjcpQ4AYPmx25jw8xmkZuVKXBm9CMOSkeHibiIi4yWXCZjduyG+H9oSSjMZjlx7hAHLQnA3Pl3q0qgIDEtGhou7iYiMn39LD/wy0QcudkrcepQG/6XBCL4VL3VZ9BwMS0ZGO7PEsEREZNRaeNrj16kd0NLTHsmZuRi1JgzrgiPZwNIAMSwZmZjEgtNw7N5NRGTsnO0ssPXN9hjYygNqjYh5v17Bh7suIidPI3Vp9BSGJSMiiuK/C7w5s0REZBIszOX4ZnALzOnTCDIB2Ho6GiN+OqltE0PSY1gyIk/Sc5Ceo4YgAB6cWSIiMhmCIGBCp9pYPaYNbJVmOH03Ef5LgnH5QbLUpREYloxK9D89llxsLaA0k0tcDRER6dtLDZyxe4ofajlZ435SJgYFhuLAxVipy6r0GJaMSBRPwRERmby6zjbYM9kPHes5ITNXjbc2ncO3QTegYQNLyTAsGZGC9UrVHHkKjojIlKmszLF2TBu84VcLAPD94ZuYsvkcMnLyJK6scmJYMiL/XgnHmSUiIlNnJpfhf682xqLXmsNcLuDApTi8Fhiq/S6gisOwZER4Go6IqPIZ3MYTWya0h5ONAldjU+C/JBhhkU+kLqtSYVgyIuzeTURUOXnXdMTeqR3QxN0OCek5GPHTSWwNi5K6rEqDYclI5Kk1uJ9UEJa4ZomIqLLxsLfE9kk+6NvMDblqER/suoh5+y4jT80GluWNYclIxCZnQa0RoZDL4GJrIXU5REQkASuFGZYMb4V3e9QHAKwLuYvRa8OQlJEjcWWmjWHJSET/s6CvmoMlZDJB4mqIiEgqgiDg7W71sHykF6wUcgTfSoD/0mDcfJgqdWkmi2HJSETzBrpERPSU3k1dsfMtX3jYW+JeQgYGLAvB4asPpS7LJDEsGYl/F3dzvRIREeVr5GaHfVP90LaWI9Ky8zD+5zMI/Os2RJENLPWJYclIRLPHEhERFaKKjRIbx7XD8HbVIYrAVwevYfq2CGTlqqUuzWQwLBkJ9lgiIqLnUZjJ8MWAZvjUvwnkMgF7Ix5gyIpQxCVnSV2aSWBYMhLssURERC8S4FMTG95oC3src5yPSUa/JScQEZ0kdVlGj2HJCGTk5CE+LRsAT8MREVHRfOs6Yd+UDqjvYoNHqdkYvCIUu8NjpC7LqDEsGYGYxPxZJTsLM6iszCWuhoiIDF31KlbYNdkP3Ru5ICdPgxnbzmPh/qtQa7jwuzQYlowA2wYQEVFJ2SjNsDLAC1NeqgMAWPH3HYxffxopWbkSV2Z8GJaMABd3ExFRachkAt7r1RDfD20JpZkMR68/xoClwYiMT5e6NKPCsGQEuLibiIjKwr+lB7ZP8oGrnQVuP05H/6XBOHEzXuqyjAbDkhEomFnydGBDSiIiKp3m1eyxb6ofWnraIzkzF6PXhmFtcCQbWBYDw5IRiEnkmiUiIio7ZzsLbH2zPQa29oBaI2L+r1fwwc6LyM5jA8uiMCwZOFEUucCbiIj0xsJcjm9eb4GP+zaCTAC2nYnGiFWntC1q6FkMSwbuSXoO0nPyE7+HPU/DERFR2QmCgPEda2PNmDawtTDDmXuJ6PfjCVx+kCx1aQaJYcnARf/TY8nVzgIW5nKJqyEiIlPSpYEz9kzxQy0nazxIzsKgwFDsvxgrdVkGh2HJwGkXdztyVomIiPSvTlUb7Jnsh471nJCZq8bkTeewOOgGNGxgqcWwZOC4XomIiMqbysoca8e0wfgOtQAAPxy+icmbziE9O0/iygwDw5KB014Jx3vCERFROTKTy/DxK42xaFBzKOQyHLwch9cCQ7T/aK/MGJYMXBRnloiIqAIN9vbEljfbwclGiWtxqfBfGoywyCdSlyUphiUDV9C9m7c6ISKiiuJVwxH7pvqhqYcdnqTnYPiqk9gSFiV1WZJhWDJgeWoN7icV3OqEC7yJiKjiuNtbYvtEX/Rt7oY8jYgPd13E3L2XkKvWSF1ahWNYMmCxyVlQa0Qo5DK42FpIXQ4REVUylgo5lgxrhVk96wMA1ofew+g1YUhMz5G4sorFsGTAov9Z3F3NwRIymSBxNUREVBkJgoCpXethRYAXrBRyhNxOQP9lwbjxMFXq0ioMw5IBK7gCoRrXKxERkcR6NXHFrsm+qOZgiXsJGRi4LASHrz6UuqwKwbBkwP5d3M31SkREJL2GrnbYN7UD2tVyRFp2Hsb/fAaBf92GKJp2A0uGJQMWzR5LRERkYBytFdg4vh1GtKsOUQS+OngN07dFICtXLXVp5UYQTT0OVoCUlBSoVCokJyfDzs5Ob/t9nJqNyPh0uNtboBoDExERGZgNJ+9h/r7LyNOIaF5NhZUB3nBVGc8FScX9/jaamaXExEQEBARApVJBpVIhICAASUlJRb5m165d6NWrF5ycnCAIAiIiIp4Zk52djbfffhtOTk6wtrZGv379EBMTUz4fooSq2irRtpYjgxIRERmkgPY18PO4trC3MseFmGT0W3IC4VGJUpeld0YTloYPH46IiAgcPHgQBw8eREREBAICAop8TXp6Ovz8/PDll18+d8z06dOxe/dubN26FSdOnEBaWhpeeeUVqNWmO51IRESkL751nLBvSgc0cLHFo9RsDFl5ErvOGcakg74YxWm4q1evonHjxjh58iTatWsHADh58iR8fHxw7do1NGjQoMjX3717F7Vq1UJ4eDhatmyp3Z6cnIyqVatiw4YNGDJkCADgwYMH8PT0xP79+9GrV69i1Vdep+GIiIiMRVp2HqZvjcChf66Qm9ipNmb3bgi5Abe+ManTcKGhoVCpVNqgBADt27eHSqVCSEhIqfd79uxZ5ObmomfPntpt7u7uaNq0aZH7zc7ORkpKis6DiIioMrNRmmFlgBemvlQXALDi7zsYt/40UrJyy7Tf1KxcqDXSzusYRViKi4uDs7PzM9udnZ0RFxdXpv0qFAo4ODjobHdxcSlyvwsXLtSunVKpVPD09Cx1DURERKZCJhMwq1cD/DCsFZRmMvx1/TEGLA1GZHx6qfe54NcraPjJAawPuau/QktI0rA0b948CIJQ5OPMmTMA8juI/pcoioVuL6sX7ffDDz9EcnKy9hEdHa33GoiIiIxVvxbu2DHJF652Frj9OB3+S07g+M3HpdrX3YR05KpFOFor9Fxl8ZlJ9s4Apk6diqFDhxY5pmbNmrhw4QIePny2S+jjx4/h4uJS6vd3dXVFTk4OEhMTdWaXHj16BF9f3+e+TqlUQqlUlvp9iYiITF2zairse9sPEzecRXhUEkavCcPHfRtjrF/NEk10FMxK1XKyLq9SX0jSsOTk5AQnJ6cXjvPx8UFycjLCwsLQtm1bAMCpU6eQnJxcZKh5ES8vL5ibmyMoKAiDBw8GAMTGxuLSpUtYtGhRqfdLREREgLOtBba+2R4f7bqEnedisOC3K7gel4oF/ZtAaSZ/4euTM3MRn5Z/096aEoYlo1iz1KhRI/Tu3RsTJkzAyZMncfLkSUyYMAGvvPKKzpVwDRs2xO7du7U/P3nyBBEREbhy5QoA4Pr164iIiNCuR1KpVBg3bhzeffddHD58GOHh4Rg5ciSaNWuG7t27V+yHJCIiMkFKMzm+fr05Pu7bCDIB2HYmGiNWncLj1OwXvvbuP7NKzrZK2Cilm98xirAEAJs2bUKzZs3Qs2dP9OzZE82bN8eGDRt0xly/fh3Jycnan/ft24dWrVqhb9++AIChQ4eiVatWWL58uXbMt99+i/79+2Pw4MHw8/ODlZUVfv31V8jlL068RERE9GKCIGB8x9pYM6YNbC3McOZeIvyXnMCl+8lFvs4QTsEBRtJnydCxzxIREVHx3H6chgnrz+BOfDoszGX45vWW6NvcrdCxi4Nu4IfDNzG0jSe+fK253msxqT5LREREZBrqVLXB7sl+6FS/KrJyNZiy+RwWB92AppBeSpf/mXmq52Jb0WXqYFgiIiKiCqWyMsea0d4Y36EWAOCHwzfx1qazSM74t4GlWiMiPDoJANC6ur0EVf5L0qvhiIiIqHIyk8vw8SuN0cDVFnN2X8Iflx8iPOoYpnatC68aDrgQk4wn6TmwszBDE3eVtLVK+u5ERERUqb3u7Ym6zjZ495fzuBOfjv/tvfzM8wozaU+EMSwRERGRpFpVd8D+aR2x+VQUDl6Kw63HaQCALg2q4r1eDV7w6vLHq+H0gFfDERERGR9eDUdERESkBwxLREREREVgWCIiIiIqAsMSERERUREYloiIiIiKwLBEREREVASGJSIiIqIiMCwRERERFYFhiYiIiKgIDEtERERERWBYIiIiIioCwxIRERFRERiWiIiIiIrAsERERERUBDOpCzAFoigCAFJSUiSuhIiIiIqr4Hu74Hv8eRiW9CA1NRUA4OnpKXElREREVFKpqalQqVTPfV4QXxSn6IU0Gg0ePHgAW1tbCIKgt/2mpKTA09MT0dHRsLOz09t+KR+Pb/ni8S1fPL7lj8e4fBnC8RVFEampqXB3d4dM9vyVSZxZ0gOZTIZq1aqV2/7t7Oz4P2o54vEtXzy+5YvHt/zxGJcvqY9vUTNKBbjAm4iIiKgIDEtERERERWBYMmBKpRJz586FUqmUuhSTxONbvnh8yxePb/njMS5fxnR8ucCbiIiIqAicWSIiIiIqAsMSERERUREYloiIiIiKwLBEREREVASGJQO1bNky1KpVCxYWFvDy8sLx48elLsngLVy4EG3atIGtrS2cnZ3Rv39/XL9+XWeMKIqYN28e3N3dYWlpiS5duuDy5cs6Y7Kzs/H222/DyckJ1tbW6NevH2JiYiryoxiFhQsXQhAETJ8+XbuNx7fs7t+/j5EjR6JKlSqwsrJCy5YtcfbsWe3zPMall5eXh48//hi1atWCpaUlateujQULFkCj0WjH8PiWzN9//41XX30V7u7uEAQBe/bs0XleX8czMTERAQEBUKlUUKlUCAgIQFJSUjl/Ot0PQgZm69atorm5ubhq1SrxypUr4rRp00Rra2vx3r17Updm0Hr16iWuXbtWvHTpkhgRESH27dtXrF69upiWlqYd8+WXX4q2trbizp07xYsXL4pDhgwR3dzcxJSUFO2YSZMmiR4eHmJQUJB47tw58aWXXhJbtGgh5uXlSfGxDFJYWJhYs2ZNsXnz5uK0adO023l8y+bJkydijRo1xDFjxoinTp0SIyMjxUOHDom3bt3SjuExLr3PPvtMrFKlivjbb7+JkZGR4vbt20UbGxvxu+++047h8S2Z/fv3i3PmzBF37twpAhB3796t87y+jmfv3r3Fpk2biiEhIWJISIjYtGlT8ZVXXqmojykyLBmgtm3bipMmTdLZ1rBhQ/GDDz6QqCLj9OjRIxGAeOzYMVEURVGj0Yiurq7il19+qR2TlZUlqlQqcfny5aIoimJSUpJobm4ubt26VTvm/v37okwmEw8ePFixH8BApaamivXq1RODgoLEzp07a8MSj2/Zvf/++2KHDh2e+zyPcdn07dtXfOONN3S2DRw4UBw5cqQoijy+ZfXfsKSv43nlyhURgHjy5EntmNDQUBGAeO3atXL+VPl4Gs7A5OTk4OzZs+jZs6fO9p49eyIkJESiqoxTcnIyAMDR0REAEBkZibi4OJ1jq1Qq0blzZ+2xPXv2LHJzc3XGuLu7o2nTpjz+/5gyZQr69u2L7t2762zn8S27ffv2wdvbG6+//jqcnZ3RqlUrrFq1Svs8j3HZdOjQAYcPH8aNGzcAAOfPn8eJEyfQp08fADy++qav4xkaGgqVSoV27dppx7Rv3x4qlarCjjlvpGtg4uPjoVar4eLiorPdxcUFcXFxElVlfERRxMyZM9GhQwc0bdoUALTHr7Bje+/ePe0YhUIBBweHZ8bw+ANbt27FuXPncPr06Wee4/Etuzt37iAwMBAzZ87ERx99hLCwMLzzzjtQKpUYNWoUj3EZvf/++0hOTkbDhg0hl8uhVqvx+eefY9iwYQD4O6xv+jqecXFxcHZ2fmb/zs7OFXbMGZYMlCAIOj+LovjMNnq+qVOn4sKFCzhx4sQzz5Xm2PL4A9HR0Zg2bRr+/PNPWFhYPHccj2/paTQaeHt744svvgAAtGrVCpcvX0ZgYCBGjRqlHcdjXDrbtm3Dxo0bsXnzZjRp0gQRERGYPn063N3dMXr0aO04Hl/90sfxLGx8RR5znoYzME5OTpDL5c+k5UePHj2Tzqlwb7/9Nvbt24ejR4+iWrVq2u2urq4AUOSxdXV1RU5ODhITE587prI6e/YsHj16BC8vL5iZmcHMzAzHjh3DDz/8ADMzM+3x4fEtPTc3NzRu3FhnW6NGjRAVFQWAv8Nl9d577+GDDz7A0KFD0axZMwQEBGDGjBlYuHAhAB5ffdPX8XR1dcXDhw+f2f/jx48r7JgzLBkYhUIBLy8vBAUF6WwPCgqCr6+vRFUZB1EUMXXqVOzatQtHjhxBrVq1dJ6vVasWXF1ddY5tTk4Ojh07pj22Xl5eMDc31xkTGxuLS5cuVfrj361bN1y8eBERERHah7e3N0aMGIGIiAjUrl2bx7eM/Pz8nml3cePGDdSoUQMAf4fLKiMjAzKZ7teeXC7Xtg7g8dUvfR1PHx8fJCcnIywsTDvm1KlTSE5OrrhjXiHLyKlECloHrF69Wrxy5Yo4ffp00draWrx7967UpRm0t956S1SpVOJff/0lxsbGah8ZGRnaMV9++aWoUqnEXbt2iRcvXhSHDRtW6GWs1apVEw8dOiSeO3dO7Nq1a6W9LPhFnr4aThR5fMsqLCxMNDMzEz///HPx5s2b4qZNm0QrKytx48aN2jE8xqU3evRo0cPDQ9s6YNeuXaKTk5M4e/Zs7Rge35JJTU0Vw8PDxfDwcBGAuHjxYjE8PFzb6kZfx7N3795i8+bNxdDQUDE0NFRs1qwZWweQKC5dulSsUaOGqFAoxNatW2svf6fnA1DoY+3atdoxGo1GnDt3rujq6ioqlUqxU6dO4sWLF3X2k5mZKU6dOlV0dHQULS0txVdeeUWMioqq4E9jHP4blnh8y+7XX38VmzZtKiqVSrFhw4biypUrdZ7nMS69lJQUcdq0aWL16tVFCwsLsXbt2uKcOXPE7Oxs7Rge35I5evRooX/vjh49WhRF/R3PhIQEccSIEaKtra1oa2srjhgxQkxMTKygTymKgiiKYsXMYREREREZH65ZIiIiIioCwxIRERFRERiWiIiIiIrAsERERERUBIYlIiIioiIwLBEREREVgWGJiIiIqAgMS0RkMObNm4eWLVtKXYbBGjNmDPr37y91GUSVDsMSEelFXFwc3n77bdSuXRtKpRKenp549dVXcfjwYalL04u7d+9CEAQ4OzsjNTVV57mWLVti3rx50hRGROWOYYmIyuzu3bvw8vLCkSNHsGjRIly8eBEHDx7ESy+9hClTpkhdnl6lpqbi66+/lroMvRFFEXl5eVKXQWTQGJaIqMwmT54MQRAQFhaGQYMGoX79+mjSpAlmzpyJkydPasdFRUXB398fNjY2sLOzw+DBg/Hw4cPn7rdLly6YPn26zrb+/ftjzJgx2p9r1qyJzz77DKNGjYKNjQ1q1KiBvXv34vHjx9r3atasGc6cOaN9zbp162Bvb48//vgDjRo1go2NDXr37o3Y2NgXfta3334bixcvxqNHj547RhAE7NmzR2ebvb091q1bB+DfWapffvkFHTt2hKWlJdq0aYMbN27g9OnT8Pb21tb0+PHjZ/Y/f/58ODs7w87ODhMnTkROTo72OVEUsWjRItSuXRuWlpZo0aIFduzYoX3+r7/+giAI+OOPP+Dt7Q2lUonjx4+/8HMTVWYMS0RUJk+ePMHBgwcxZcoUWFtbP/O8vb09gPwv8f79++PJkyc4duwYgoKCcPv2bQwZMqTMNXz77bfw8/NDeHg4+vbti4CAAIwaNQojR47EuXPnULduXYwaNQpP3wozIyMDX3/9NTZs2IC///4bUVFRmDVr1gvfa9iwYahbty4WLFhQ5rrnzp2Ljz/+GOfOnYOZmRmGDRuG2bNn4/vvv8fx48dx+/Zt/O9//9N5zeHDh3H16lUcPXoUW7Zswe7duzF//nzt8x9//DHWrl2LwMBAXL58GTNmzMDIkSNx7Ngxnf3Mnj0bCxcuxNWrV9G8efMyfxYik1Zht+wlIpN06tQpEYC4a9euIsf9+eefolwu17mb+OXLl0UAYlhYmCiKojh37lyxRYsW2uc7d+4sTps2TWc//v7+2juai6Io1qhRQxw5cqT259jYWBGA+Mknn2i3hYaGigDE2NhYURRFce3atSIA8datW9oxS5cuFV1cXJ5bf2RkpAhADA8PFw8ePCiam5trX9+iRQtx7ty52rEAxN27d+u8XqVSiWvXrtXZ108//aR9fsuWLSIA8fDhw9ptCxcuFBs0aKD9efTo0aKjo6OYnp6u3RYYGCja2NiIarVaTEtLEy0sLMSQkBCd9x43bpw4bNgwURT/vUv8nj17nvtZiUgXZ5aIqEzEf2ZrBEEoctzVq1fh6ekJT09P7bbGjRvD3t4eV69eLVMNT8+MuLi4AACaNWv2zLanT51ZWVmhTp062p/d3NyKPLX2tF69eqFDhw745JNPyr3u/9bUokULWFlZaX/28fFBWloaoqOjceXKFWRlZaFHjx6wsbHRPn7++Wfcvn1bZz/e3t5lqp2oMjGTugAiMm716tWDIAi4evVqkZe1i6JYaKB63nYAkMlkOqfOACA3N/eZcebm5to/F+yrsG0ajabQ1xSM+e97FeXLL7+Ej48P3nvvvWeeK2xfpa376ZqL8vTY33//HR4eHjrPK5VKnZ8LO2VKRIXjzBIRlYmjoyN69eqFpUuXIj09/Znnk5KSAOTPIkVFRSE6Olr73JUrV5CcnIxGjRoVuu+qVavqLLpWq9W4dOmSfj9AKbVt2xYDBw7EBx988Mxz/6375s2byMjI0Mv7nj9/HpmZmdqfT548CRsbG1SrVg2NGzeGUqlEVFQU6tatq/N4ekaPiEqGM0tEVGbLli2Dr68v2rZtiwULFqB58+bIy8tDUFAQAgMDcfXqVXTv3h3NmzfHiBEj8N133yEvLw+TJ09G586dn3tKqGvXrpg5cyZ+//131KlTB99++602fBmCzz//HE2aNIGZme5fpV27dsWSJUvQvn17aDQavP/++8/MZJVWTk4Oxo0bh48//hj37t3D3LlzMXXqVMhkMtja2mLWrFmYMWMGNBoNOnTogJSUFISEhMDGxgajR4/WSw1ElQ3DEhGVWa1atXDu3Dl8/vnnePfddxEbG4uqVavCy8sLgYGBAP69nP7tt99Gp06dIJPJ0Lt3b/z444/P3e8bb7yB8+fPY9SoUTAzM8OMGTPw0ksvVdTHeqH69evjjTfewMqVK3W2f/PNNxg7diw6deoEd3d3fP/99zh79qxe3rNbt26oV68eOnXqhOzsbAwdOlSnIeann34KZ2dnLFy4EHfu3IG9vT1at26Njz76SC/vT1QZCWJJTtITERERVTJcs0RERERUBIYlIiIioiIwLBEREREVgWGJiIiIqAgMS0RERERFYFgiIiIiKgLDEhEREVERGJaIiIiIisCwRERERFQEhiUiIiKiIjAsERERERWBYYmIiIioCP8P3XzroUr1Z7cAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制图像\n",
    "plt.plot(range(2, len(numeric_data_1500) + 2), numeric_data_1500)\n",
    "\n",
    "# 添加标题和标签\n",
    "plt.title(\"Row 1500 Data Plot\")\n",
    "plt.xlabel(\"Column Number\")\n",
    "plt.ylabel(\"Values\")\n",
    "\n",
    "# 显示图像\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataframe.corr(numeric_only=True)\n",
    "dataframe.head(5)\n",
    "# 5 rows × 1028 columns\n",
    "dataframe['0（磁通密度B，T）'].hist()\n",
    "dataframe['磁芯损耗，w/m3'].hist()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 特征获取/工程\n",
    "我们已经确定了周期性数据表现为不同的波形.那么提取这些序列数据的特征并建立分类模型变得尤为重要."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [],
   "source": [
    "def generate_waveforms(num_samples):\n",
    "    # 用来模拟不同类型的波形数据\n",
    "    # 假设你有每行1023列的波形数据，每一行代表一种波形\n",
    "    x = np.linspace(0, 2 * np.pi, 1023)  # 生成1023个数据点，模拟波形数据\n",
    "    data = []\n",
    "    labels = []\n",
    "    \n",
    "    for _ in range(num_samples):\n",
    "        wave_type = np.random.choice(['sine', 'triangle', 'trapezoid'])\n",
    "        if wave_type == 'sine':\n",
    "            y = np.sin(x)  # 正弦波\n",
    "            label = 0  # 正弦波标签\n",
    "        elif wave_type == 'triangle':\n",
    "            y = 2 * np.abs(x / np.pi - np.floor(x / np.pi + 0.5))  # 三角波\n",
    "            label = 1  # 三角波标签\n",
    "        else:\n",
    "            y = np.clip(2 * np.abs(x / np.pi - np.floor(x / np.pi + 0.5)), 0.5, 1)  # 梯形波\n",
    "            label = 2  # 梯形波标签\n",
    "        \n",
    "        data.append(y)\n",
    "        labels.append(label)\n",
    "    \n",
    "    return np.array(data), np.array(labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 生成示例波形数据\n",
    "X, y = generate_waveforms(1500)  # 生成1500个波形数据样本\n",
    "# 转换为DataFrame, 以方便后续的查看\n",
    "df = pd.DataFrame(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.ndarray"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>...</th>\n",
       "      <th>1013</th>\n",
       "      <th>1014</th>\n",
       "      <th>1015</th>\n",
       "      <th>1016</th>\n",
       "      <th>1017</th>\n",
       "      <th>1018</th>\n",
       "      <th>1019</th>\n",
       "      <th>1020</th>\n",
       "      <th>1021</th>\n",
       "      <th>1022</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.003914</td>\n",
       "      <td>0.007828</td>\n",
       "      <td>0.011742</td>\n",
       "      <td>0.015656</td>\n",
       "      <td>0.019569</td>\n",
       "      <td>0.023483</td>\n",
       "      <td>0.027397</td>\n",
       "      <td>0.031311</td>\n",
       "      <td>0.035225</td>\n",
       "      <td>...</td>\n",
       "      <td>0.035225</td>\n",
       "      <td>0.031311</td>\n",
       "      <td>0.027397</td>\n",
       "      <td>0.023483</td>\n",
       "      <td>0.019569</td>\n",
       "      <td>0.015656</td>\n",
       "      <td>0.011742</td>\n",
       "      <td>0.007828</td>\n",
       "      <td>0.003914</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.006148</td>\n",
       "      <td>0.012296</td>\n",
       "      <td>0.018443</td>\n",
       "      <td>0.024589</td>\n",
       "      <td>0.030735</td>\n",
       "      <td>0.036879</td>\n",
       "      <td>0.043022</td>\n",
       "      <td>0.049164</td>\n",
       "      <td>0.055303</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.055303</td>\n",
       "      <td>-0.049164</td>\n",
       "      <td>-0.043022</td>\n",
       "      <td>-0.036879</td>\n",
       "      <td>-0.030735</td>\n",
       "      <td>-0.024589</td>\n",
       "      <td>-0.018443</td>\n",
       "      <td>-0.012296</td>\n",
       "      <td>-0.006148</td>\n",
       "      <td>-2.449294e-16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.003914</td>\n",
       "      <td>0.007828</td>\n",
       "      <td>0.011742</td>\n",
       "      <td>0.015656</td>\n",
       "      <td>0.019569</td>\n",
       "      <td>0.023483</td>\n",
       "      <td>0.027397</td>\n",
       "      <td>0.031311</td>\n",
       "      <td>0.035225</td>\n",
       "      <td>...</td>\n",
       "      <td>0.035225</td>\n",
       "      <td>0.031311</td>\n",
       "      <td>0.027397</td>\n",
       "      <td>0.023483</td>\n",
       "      <td>0.019569</td>\n",
       "      <td>0.015656</td>\n",
       "      <td>0.011742</td>\n",
       "      <td>0.007828</td>\n",
       "      <td>0.003914</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.006148</td>\n",
       "      <td>0.012296</td>\n",
       "      <td>0.018443</td>\n",
       "      <td>0.024589</td>\n",
       "      <td>0.030735</td>\n",
       "      <td>0.036879</td>\n",
       "      <td>0.043022</td>\n",
       "      <td>0.049164</td>\n",
       "      <td>0.055303</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.055303</td>\n",
       "      <td>-0.049164</td>\n",
       "      <td>-0.043022</td>\n",
       "      <td>-0.036879</td>\n",
       "      <td>-0.030735</td>\n",
       "      <td>-0.024589</td>\n",
       "      <td>-0.018443</td>\n",
       "      <td>-0.012296</td>\n",
       "      <td>-0.006148</td>\n",
       "      <td>-2.449294e-16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.003914</td>\n",
       "      <td>0.007828</td>\n",
       "      <td>0.011742</td>\n",
       "      <td>0.015656</td>\n",
       "      <td>0.019569</td>\n",
       "      <td>0.023483</td>\n",
       "      <td>0.027397</td>\n",
       "      <td>0.031311</td>\n",
       "      <td>0.035225</td>\n",
       "      <td>...</td>\n",
       "      <td>0.035225</td>\n",
       "      <td>0.031311</td>\n",
       "      <td>0.027397</td>\n",
       "      <td>0.023483</td>\n",
       "      <td>0.019569</td>\n",
       "      <td>0.015656</td>\n",
       "      <td>0.011742</td>\n",
       "      <td>0.007828</td>\n",
       "      <td>0.003914</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 1023 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   0         1         2         3         4         5         6         7     \\\n",
       "0   0.0  0.003914  0.007828  0.011742  0.015656  0.019569  0.023483  0.027397   \n",
       "1   0.0  0.006148  0.012296  0.018443  0.024589  0.030735  0.036879  0.043022   \n",
       "2   0.0  0.003914  0.007828  0.011742  0.015656  0.019569  0.023483  0.027397   \n",
       "3   0.0  0.006148  0.012296  0.018443  0.024589  0.030735  0.036879  0.043022   \n",
       "4   0.0  0.003914  0.007828  0.011742  0.015656  0.019569  0.023483  0.027397   \n",
       "\n",
       "       8         9     ...      1013      1014      1015      1016      1017  \\\n",
       "0  0.031311  0.035225  ...  0.035225  0.031311  0.027397  0.023483  0.019569   \n",
       "1  0.049164  0.055303  ... -0.055303 -0.049164 -0.043022 -0.036879 -0.030735   \n",
       "2  0.031311  0.035225  ...  0.035225  0.031311  0.027397  0.023483  0.019569   \n",
       "3  0.049164  0.055303  ... -0.055303 -0.049164 -0.043022 -0.036879 -0.030735   \n",
       "4  0.031311  0.035225  ...  0.035225  0.031311  0.027397  0.023483  0.019569   \n",
       "\n",
       "       1018      1019      1020      1021          1022  \n",
       "0  0.015656  0.011742  0.007828  0.003914  0.000000e+00  \n",
       "1 -0.024589 -0.018443 -0.012296 -0.006148 -2.449294e-16  \n",
       "2  0.015656  0.011742  0.007828  0.003914  0.000000e+00  \n",
       "3 -0.024589 -0.018443 -0.012296 -0.006148 -2.449294e-16  \n",
       "4  0.015656  0.011742  0.007828  0.003914  0.000000e+00  \n",
       "\n",
       "[5 rows x 1023 columns]"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 准备真实的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 准备训练数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [],
   "source": [
    "traindata = dataframe_question_one.loc[:, 2 :]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>...</th>\n",
       "      <th>1014</th>\n",
       "      <th>1015</th>\n",
       "      <th>1016</th>\n",
       "      <th>1017</th>\n",
       "      <th>1018</th>\n",
       "      <th>1019</th>\n",
       "      <th>1020</th>\n",
       "      <th>1021</th>\n",
       "      <th>1022</th>\n",
       "      <th>1023</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000566</td>\n",
       "      <td>0.000743</td>\n",
       "      <td>0.000919</td>\n",
       "      <td>0.001096</td>\n",
       "      <td>0.001272</td>\n",
       "      <td>0.001448</td>\n",
       "      <td>0.001624</td>\n",
       "      <td>0.001800</td>\n",
       "      <td>0.001976</td>\n",
       "      <td>0.002151</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.001551</td>\n",
       "      <td>-0.001374</td>\n",
       "      <td>-0.001198</td>\n",
       "      <td>-0.001022</td>\n",
       "      <td>-0.000846</td>\n",
       "      <td>-0.000669</td>\n",
       "      <td>-0.000492</td>\n",
       "      <td>-0.000316</td>\n",
       "      <td>-0.000140</td>\n",
       "      <td>0.000036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.000165</td>\n",
       "      <td>0.000028</td>\n",
       "      <td>0.000221</td>\n",
       "      <td>0.000413</td>\n",
       "      <td>0.000605</td>\n",
       "      <td>0.000798</td>\n",
       "      <td>0.000991</td>\n",
       "      <td>0.001183</td>\n",
       "      <td>0.001375</td>\n",
       "      <td>0.001567</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.002476</td>\n",
       "      <td>-0.002284</td>\n",
       "      <td>-0.002091</td>\n",
       "      <td>-0.001899</td>\n",
       "      <td>-0.001707</td>\n",
       "      <td>-0.001515</td>\n",
       "      <td>-0.001322</td>\n",
       "      <td>-0.001129</td>\n",
       "      <td>-0.000937</td>\n",
       "      <td>-0.000744</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.003349</td>\n",
       "      <td>-0.003134</td>\n",
       "      <td>-0.002919</td>\n",
       "      <td>-0.002704</td>\n",
       "      <td>-0.002488</td>\n",
       "      <td>-0.002273</td>\n",
       "      <td>-0.002057</td>\n",
       "      <td>-0.001841</td>\n",
       "      <td>-0.001625</td>\n",
       "      <td>-0.001409</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.005927</td>\n",
       "      <td>-0.005713</td>\n",
       "      <td>-0.005499</td>\n",
       "      <td>-0.005285</td>\n",
       "      <td>-0.005070</td>\n",
       "      <td>-0.004855</td>\n",
       "      <td>-0.004640</td>\n",
       "      <td>-0.004425</td>\n",
       "      <td>-0.004210</td>\n",
       "      <td>-0.003995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.000023</td>\n",
       "      <td>0.000222</td>\n",
       "      <td>0.000466</td>\n",
       "      <td>0.000711</td>\n",
       "      <td>0.000955</td>\n",
       "      <td>0.001199</td>\n",
       "      <td>0.001443</td>\n",
       "      <td>0.001687</td>\n",
       "      <td>0.001931</td>\n",
       "      <td>0.002174</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.002950</td>\n",
       "      <td>-0.002707</td>\n",
       "      <td>-0.002463</td>\n",
       "      <td>-0.002220</td>\n",
       "      <td>-0.001976</td>\n",
       "      <td>-0.001732</td>\n",
       "      <td>-0.001488</td>\n",
       "      <td>-0.001244</td>\n",
       "      <td>-0.001000</td>\n",
       "      <td>-0.000756</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.001007</td>\n",
       "      <td>0.001281</td>\n",
       "      <td>0.001555</td>\n",
       "      <td>0.001830</td>\n",
       "      <td>0.002104</td>\n",
       "      <td>0.002378</td>\n",
       "      <td>0.002653</td>\n",
       "      <td>0.002927</td>\n",
       "      <td>0.003201</td>\n",
       "      <td>0.003475</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.002290</td>\n",
       "      <td>-0.002016</td>\n",
       "      <td>-0.001741</td>\n",
       "      <td>-0.001466</td>\n",
       "      <td>-0.001192</td>\n",
       "      <td>-0.000917</td>\n",
       "      <td>-0.000642</td>\n",
       "      <td>-0.000367</td>\n",
       "      <td>-0.000092</td>\n",
       "      <td>0.000183</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 1022 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       2         3         4         5         6         7         8     \\\n",
       "0  0.000566  0.000743  0.000919  0.001096  0.001272  0.001448  0.001624   \n",
       "1 -0.000165  0.000028  0.000221  0.000413  0.000605  0.000798  0.000991   \n",
       "2 -0.003349 -0.003134 -0.002919 -0.002704 -0.002488 -0.002273 -0.002057   \n",
       "3 -0.000023  0.000222  0.000466  0.000711  0.000955  0.001199  0.001443   \n",
       "4  0.001007  0.001281  0.001555  0.001830  0.002104  0.002378  0.002653   \n",
       "\n",
       "       9         10        11    ...      1014      1015      1016      1017  \\\n",
       "0  0.001800  0.001976  0.002151  ... -0.001551 -0.001374 -0.001198 -0.001022   \n",
       "1  0.001183  0.001375  0.001567  ... -0.002476 -0.002284 -0.002091 -0.001899   \n",
       "2 -0.001841 -0.001625 -0.001409  ... -0.005927 -0.005713 -0.005499 -0.005285   \n",
       "3  0.001687  0.001931  0.002174  ... -0.002950 -0.002707 -0.002463 -0.002220   \n",
       "4  0.002927  0.003201  0.003475  ... -0.002290 -0.002016 -0.001741 -0.001466   \n",
       "\n",
       "       1018      1019      1020      1021      1022      1023  \n",
       "0 -0.000846 -0.000669 -0.000492 -0.000316 -0.000140  0.000036  \n",
       "1 -0.001707 -0.001515 -0.001322 -0.001129 -0.000937 -0.000744  \n",
       "2 -0.005070 -0.004855 -0.004640 -0.004425 -0.004210 -0.003995  \n",
       "3 -0.001976 -0.001732 -0.001488 -0.001244 -0.001000 -0.000756  \n",
       "4 -0.001192 -0.000917 -0.000642 -0.000367 -0.000092  0.000183  \n",
       "\n",
       "[5 rows x 1022 columns]"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "traindata.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 准备标签\n",
    "label = dataframe_question_one.iloc[:, 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    正弦波\n",
       "1    正弦波\n",
       "2    正弦波\n",
       "3    正弦波\n",
       "4    正弦波\n",
       "Name: 励磁波形, dtype: object"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "label.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0       1\n",
      "1       1\n",
      "2       1\n",
      "3       1\n",
      "4       1\n",
      "       ..\n",
      "3395    3\n",
      "3396    3\n",
      "3397    3\n",
      "3398    3\n",
      "3399    3\n",
      "Name: 励磁波形, Length: 3400, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# 创建映射字典，将波形字符串映射为数值\n",
    "mapping = {'正弦波': 1, '三角波': 2, '梯形波': 3}\n",
    "\n",
    "# 使用map函数将标签转为数值\n",
    "y = label.map(mapping)\n",
    "\n",
    "# 查看转换结果\n",
    "print(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.ndarray"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_np = np.array(y)\n",
    "type(y_np)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 测试"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 分类模型定义"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.99\n",
      "Precision: 0.99\n",
      "Recall: 0.99\n",
      "F1 Score: 0.99\n"
     ]
    }
   ],
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(traindata, y_np, test_size=0.2, random_state=42)\n",
    "\n",
    "# 训练\n",
    "clf = svm.SVC(kernel='linear')  # 使用线性核\n",
    "clf.fit(X_train, y_train)  # 训练模型\n",
    "\n",
    "# 测试集预测\n",
    "y_pred = clf.predict(X_test)\n",
    "\n",
    "accuracy = accuracy_score(y_test, y_pred)\n",
    "precision = precision_score(y_test, y_pred, average='weighted')\n",
    "recall = recall_score(y_test, y_pred, average='weighted')\n",
    "f1 = f1_score(y_test, y_pred, average='weighted')\n",
    "\n",
    "print(f\"Accuracy: {accuracy:.2f}\")\n",
    "print(f\"Precision: {precision:.2f}\")\n",
    "print(f\"Recall: {recall:.2f}\")\n",
    "print(f\"F1 Score: {f1:.2f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>SVC(kernel=&#x27;linear&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;SVC<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.svm.SVC.html\">?<span>Documentation for SVC</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>SVC(kernel=&#x27;linear&#x27;)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "SVC(kernel='linear')"
      ]
     },
     "execution_count": 125,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 全训练数据训练\n",
    "clf_all_data = svm.SVC(kernel='linear')\n",
    "clf_all_data.fit(traindata, y_np)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 模型测试"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 分类模型测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 读取附件二\n",
    "test_data_file_path = \"附件二（测试集）.xlsx\"\n",
    "test_frame = pd.read_excel(test_data_file_path, engine='openpyxl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>...</th>\n",
       "      <th>1014</th>\n",
       "      <th>1015</th>\n",
       "      <th>1016</th>\n",
       "      <th>1017</th>\n",
       "      <th>1018</th>\n",
       "      <th>1019</th>\n",
       "      <th>1020</th>\n",
       "      <th>1021</th>\n",
       "      <th>1022</th>\n",
       "      <th>1023</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.097045</td>\n",
       "      <td>-0.094873</td>\n",
       "      <td>-0.092701</td>\n",
       "      <td>-0.090534</td>\n",
       "      <td>-0.088371</td>\n",
       "      <td>-0.086208</td>\n",
       "      <td>-0.084045</td>\n",
       "      <td>-0.081882</td>\n",
       "      <td>-0.079719</td>\n",
       "      <td>-0.077562</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.106739</td>\n",
       "      <td>-0.106970</td>\n",
       "      <td>-0.107198</td>\n",
       "      <td>-0.107405</td>\n",
       "      <td>-0.107564</td>\n",
       "      <td>-0.107633</td>\n",
       "      <td>-0.107374</td>\n",
       "      <td>-0.106567</td>\n",
       "      <td>-0.105241</td>\n",
       "      <td>-0.103473</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.030391</td>\n",
       "      <td>-0.029704</td>\n",
       "      <td>-0.029019</td>\n",
       "      <td>-0.028333</td>\n",
       "      <td>-0.027647</td>\n",
       "      <td>-0.026963</td>\n",
       "      <td>-0.026278</td>\n",
       "      <td>-0.025595</td>\n",
       "      <td>-0.024912</td>\n",
       "      <td>-0.024230</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.034050</td>\n",
       "      <td>-0.034100</td>\n",
       "      <td>-0.034136</td>\n",
       "      <td>-0.034158</td>\n",
       "      <td>-0.034159</td>\n",
       "      <td>-0.034103</td>\n",
       "      <td>-0.033926</td>\n",
       "      <td>-0.033588</td>\n",
       "      <td>-0.033087</td>\n",
       "      <td>-0.032461</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.063737</td>\n",
       "      <td>-0.062185</td>\n",
       "      <td>-0.060640</td>\n",
       "      <td>-0.059101</td>\n",
       "      <td>-0.057567</td>\n",
       "      <td>-0.056037</td>\n",
       "      <td>-0.054509</td>\n",
       "      <td>-0.052983</td>\n",
       "      <td>-0.051456</td>\n",
       "      <td>-0.049929</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.074207</td>\n",
       "      <td>-0.074200</td>\n",
       "      <td>-0.074168</td>\n",
       "      <td>-0.074077</td>\n",
       "      <td>-0.073844</td>\n",
       "      <td>-0.073352</td>\n",
       "      <td>-0.072520</td>\n",
       "      <td>-0.071357</td>\n",
       "      <td>-0.069958</td>\n",
       "      <td>-0.068436</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.022084</td>\n",
       "      <td>-0.021540</td>\n",
       "      <td>-0.020998</td>\n",
       "      <td>-0.020455</td>\n",
       "      <td>-0.019912</td>\n",
       "      <td>-0.019372</td>\n",
       "      <td>-0.018835</td>\n",
       "      <td>-0.018297</td>\n",
       "      <td>-0.017758</td>\n",
       "      <td>-0.017218</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.027047</td>\n",
       "      <td>-0.027007</td>\n",
       "      <td>-0.026898</td>\n",
       "      <td>-0.026682</td>\n",
       "      <td>-0.026344</td>\n",
       "      <td>-0.025900</td>\n",
       "      <td>-0.025387</td>\n",
       "      <td>-0.024845</td>\n",
       "      <td>-0.024297</td>\n",
       "      <td>-0.023745</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.074096</td>\n",
       "      <td>-0.072348</td>\n",
       "      <td>-0.070611</td>\n",
       "      <td>-0.068883</td>\n",
       "      <td>-0.067162</td>\n",
       "      <td>-0.065442</td>\n",
       "      <td>-0.063724</td>\n",
       "      <td>-0.062006</td>\n",
       "      <td>-0.060286</td>\n",
       "      <td>-0.058562</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.084331</td>\n",
       "      <td>-0.084361</td>\n",
       "      <td>-0.084376</td>\n",
       "      <td>-0.084366</td>\n",
       "      <td>-0.084294</td>\n",
       "      <td>-0.084046</td>\n",
       "      <td>-0.083461</td>\n",
       "      <td>-0.082435</td>\n",
       "      <td>-0.081015</td>\n",
       "      <td>-0.079358</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 1022 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       2         3         4         5         6         7         8     \\\n",
       "0 -0.097045 -0.094873 -0.092701 -0.090534 -0.088371 -0.086208 -0.084045   \n",
       "1 -0.030391 -0.029704 -0.029019 -0.028333 -0.027647 -0.026963 -0.026278   \n",
       "2 -0.063737 -0.062185 -0.060640 -0.059101 -0.057567 -0.056037 -0.054509   \n",
       "3 -0.022084 -0.021540 -0.020998 -0.020455 -0.019912 -0.019372 -0.018835   \n",
       "4 -0.074096 -0.072348 -0.070611 -0.068883 -0.067162 -0.065442 -0.063724   \n",
       "\n",
       "       9         10        11    ...      1014      1015      1016      1017  \\\n",
       "0 -0.081882 -0.079719 -0.077562  ... -0.106739 -0.106970 -0.107198 -0.107405   \n",
       "1 -0.025595 -0.024912 -0.024230  ... -0.034050 -0.034100 -0.034136 -0.034158   \n",
       "2 -0.052983 -0.051456 -0.049929  ... -0.074207 -0.074200 -0.074168 -0.074077   \n",
       "3 -0.018297 -0.017758 -0.017218  ... -0.027047 -0.027007 -0.026898 -0.026682   \n",
       "4 -0.062006 -0.060286 -0.058562  ... -0.084331 -0.084361 -0.084376 -0.084366   \n",
       "\n",
       "       1018      1019      1020      1021      1022      1023  \n",
       "0 -0.107564 -0.107633 -0.107374 -0.106567 -0.105241 -0.103473  \n",
       "1 -0.034159 -0.034103 -0.033926 -0.033588 -0.033087 -0.032461  \n",
       "2 -0.073844 -0.073352 -0.072520 -0.071357 -0.069958 -0.068436  \n",
       "3 -0.026344 -0.025900 -0.025387 -0.024845 -0.024297 -0.023745  \n",
       "4 -0.084294 -0.084046 -0.083461 -0.082435 -0.081015 -0.079358  \n",
       "\n",
       "[5 rows x 1022 columns]"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 准备获取测试数据集\n",
    "test_input_svm = test_frame.loc[:, 2 :]\n",
    "test_input_svm.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 预测测试机结果\n",
    "test_y_prediction_result = clf.predict(test_input_svm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n",
      "80\n"
     ]
    }
   ],
   "source": [
    "print(type(test_y_prediction_result))\n",
    "print(len(test_y_prediction_result))\n",
    "# 答案数量正确"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 读取附件四\n",
    "result_data_file_path = \"附件四（Excel表）.xlsx\"\n",
    "result_frame = pd.read_excel(result_data_file_path, engine='openpyxl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>序号</th>\n",
       "      <th>附件二（80个样品）励磁波形分类结果</th>\n",
       "      <th>附件三（400个样品）磁芯损耗预测结果</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   序号  附件二（80个样品）励磁波形分类结果  附件三（400个样品）磁芯损耗预测结果\n",
       "0   1                 NaN                  NaN\n",
       "1   2                 NaN                  NaN\n",
       "2   3                 NaN                  NaN\n",
       "3   4                 NaN                  NaN\n",
       "4   5                 NaN                  NaN"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result_frame.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['序号', '附件二（80个样品）励磁波形分类结果', '附件三（400个样品）磁芯损耗预测结果']"
      ]
     },
     "execution_count": 138,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result_frame.columns.tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert len(test_y_prediction_result) == 80, \"预测数量是80\"\n",
    "\n",
    "result_frame.loc[result_frame.index[:80], '附件二（80个样品）励磁波形分类结果'] = test_y_prediction_result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>序号</th>\n",
       "      <th>附件二（80个样品）励磁波形分类结果</th>\n",
       "      <th>附件三（400个样品）磁芯损耗预测结果</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   序号  附件二（80个样品）励磁波形分类结果  附件三（400个样品）磁芯损耗预测结果\n",
       "0   1                 2.0                  NaN\n",
       "1   2                 2.0                  NaN\n",
       "2   3                 2.0                  NaN\n",
       "3   4                 2.0                  NaN\n",
       "4   5                 2.0                  NaN"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result_frame.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 保存实验结果\n",
    "result_frame.to_excel('附件四（Excel表）.xlsx', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 加载附件三\n",
    "test_data_file_third_path = \"附件三（测试集）.xlsx\"\n",
    "test_frame_third = pd.read_excel(test_data_file_third_path, engine='openpyxl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>...</th>\n",
       "      <th>1014</th>\n",
       "      <th>1015</th>\n",
       "      <th>1016</th>\n",
       "      <th>1017</th>\n",
       "      <th>1018</th>\n",
       "      <th>1019</th>\n",
       "      <th>1020</th>\n",
       "      <th>1021</th>\n",
       "      <th>1022</th>\n",
       "      <th>1023</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.002977</td>\n",
       "      <td>0.003358</td>\n",
       "      <td>0.003739</td>\n",
       "      <td>0.004119</td>\n",
       "      <td>0.004500</td>\n",
       "      <td>0.004880</td>\n",
       "      <td>0.005261</td>\n",
       "      <td>0.005642</td>\n",
       "      <td>0.006022</td>\n",
       "      <td>0.006402</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.001596</td>\n",
       "      <td>-0.001214</td>\n",
       "      <td>-0.000833</td>\n",
       "      <td>-0.000452</td>\n",
       "      <td>-0.000072</td>\n",
       "      <td>0.000308</td>\n",
       "      <td>0.000689</td>\n",
       "      <td>0.001070</td>\n",
       "      <td>0.001452</td>\n",
       "      <td>0.001834</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000333</td>\n",
       "      <td>0.000716</td>\n",
       "      <td>0.001099</td>\n",
       "      <td>0.001482</td>\n",
       "      <td>0.001864</td>\n",
       "      <td>0.002247</td>\n",
       "      <td>0.002630</td>\n",
       "      <td>0.003012</td>\n",
       "      <td>0.003395</td>\n",
       "      <td>0.003778</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.004269</td>\n",
       "      <td>-0.003886</td>\n",
       "      <td>-0.003503</td>\n",
       "      <td>-0.003118</td>\n",
       "      <td>-0.002734</td>\n",
       "      <td>-0.002352</td>\n",
       "      <td>-0.001969</td>\n",
       "      <td>-0.001586</td>\n",
       "      <td>-0.001203</td>\n",
       "      <td>-0.000820</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000390</td>\n",
       "      <td>0.000822</td>\n",
       "      <td>0.001255</td>\n",
       "      <td>0.001688</td>\n",
       "      <td>0.002120</td>\n",
       "      <td>0.002552</td>\n",
       "      <td>0.002985</td>\n",
       "      <td>0.003418</td>\n",
       "      <td>0.003851</td>\n",
       "      <td>0.004283</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.004800</td>\n",
       "      <td>-0.004368</td>\n",
       "      <td>-0.003935</td>\n",
       "      <td>-0.003502</td>\n",
       "      <td>-0.003069</td>\n",
       "      <td>-0.002636</td>\n",
       "      <td>-0.002204</td>\n",
       "      <td>-0.001772</td>\n",
       "      <td>-0.001340</td>\n",
       "      <td>-0.000908</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.001866</td>\n",
       "      <td>0.002249</td>\n",
       "      <td>0.002633</td>\n",
       "      <td>0.003017</td>\n",
       "      <td>0.003401</td>\n",
       "      <td>0.003785</td>\n",
       "      <td>0.004169</td>\n",
       "      <td>0.004553</td>\n",
       "      <td>0.004936</td>\n",
       "      <td>0.005318</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.002742</td>\n",
       "      <td>-0.002359</td>\n",
       "      <td>-0.001975</td>\n",
       "      <td>-0.001591</td>\n",
       "      <td>-0.001207</td>\n",
       "      <td>-0.000823</td>\n",
       "      <td>-0.000438</td>\n",
       "      <td>-0.000054</td>\n",
       "      <td>0.000329</td>\n",
       "      <td>0.000713</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.001576</td>\n",
       "      <td>-0.001090</td>\n",
       "      <td>-0.000603</td>\n",
       "      <td>-0.000117</td>\n",
       "      <td>0.000367</td>\n",
       "      <td>0.000852</td>\n",
       "      <td>0.001339</td>\n",
       "      <td>0.001826</td>\n",
       "      <td>0.002313</td>\n",
       "      <td>0.002799</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.007403</td>\n",
       "      <td>-0.006918</td>\n",
       "      <td>-0.006432</td>\n",
       "      <td>-0.005947</td>\n",
       "      <td>-0.005462</td>\n",
       "      <td>-0.004976</td>\n",
       "      <td>-0.004491</td>\n",
       "      <td>-0.004006</td>\n",
       "      <td>-0.003521</td>\n",
       "      <td>-0.003035</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 1022 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       2         3         4         5         6         7         8     \\\n",
       "0  0.002977  0.003358  0.003739  0.004119  0.004500  0.004880  0.005261   \n",
       "1  0.000333  0.000716  0.001099  0.001482  0.001864  0.002247  0.002630   \n",
       "2  0.000390  0.000822  0.001255  0.001688  0.002120  0.002552  0.002985   \n",
       "3  0.001866  0.002249  0.002633  0.003017  0.003401  0.003785  0.004169   \n",
       "4 -0.001576 -0.001090 -0.000603 -0.000117  0.000367  0.000852  0.001339   \n",
       "\n",
       "       9         10        11    ...      1014      1015      1016      1017  \\\n",
       "0  0.005642  0.006022  0.006402  ... -0.001596 -0.001214 -0.000833 -0.000452   \n",
       "1  0.003012  0.003395  0.003778  ... -0.004269 -0.003886 -0.003503 -0.003118   \n",
       "2  0.003418  0.003851  0.004283  ... -0.004800 -0.004368 -0.003935 -0.003502   \n",
       "3  0.004553  0.004936  0.005318  ... -0.002742 -0.002359 -0.001975 -0.001591   \n",
       "4  0.001826  0.002313  0.002799  ... -0.007403 -0.006918 -0.006432 -0.005947   \n",
       "\n",
       "       1018      1019      1020      1021      1022      1023  \n",
       "0 -0.000072  0.000308  0.000689  0.001070  0.001452  0.001834  \n",
       "1 -0.002734 -0.002352 -0.001969 -0.001586 -0.001203 -0.000820  \n",
       "2 -0.003069 -0.002636 -0.002204 -0.001772 -0.001340 -0.000908  \n",
       "3 -0.001207 -0.000823 -0.000438 -0.000054  0.000329  0.000713  \n",
       "4 -0.005462 -0.004976 -0.004491 -0.004006 -0.003521 -0.003035  \n",
       "\n",
       "[5 rows x 1022 columns]"
      ]
     },
     "execution_count": 145,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 准备获取测试数据集\n",
    "test_input_third_svm = test_frame_third.loc[:, 2 :]\n",
    "test_input_third_svm.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 预测测试机结果\n",
    "test_y_prediction_result_third = clf.predict(test_input_third_svm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'>\n",
      "400\n",
      "[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2\n",
      " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3\n",
      " 3 3 3 2 3 3 3 3 3 3 3 3 3 2 2 3 3 3 3 3 3 2 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 1 1 1 1 2 1 2 3 2 1 2 1 1 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
      " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 2 2 3 3 3 3 3 3 3 3 3 3\n",
      " 3 2 3 3 3 2 2 2 3 3 3 3 3 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1\n",
      " 1 2 2 1 2 2 2 3 2 3 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n",
      " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 2 3 3 3 3 2 3 3 3 3 3 2 2 2 3 3 3\n",
      " 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n",
      " 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3\n",
      " 2 2 2 2 2 2 3 3 3 3 3 3 2 2 2 2 3 3 3 3 3 2 2 2 2 3 3 3 3 2]\n"
     ]
    }
   ],
   "source": [
    "print(type(test_y_prediction_result_third))\n",
    "print(len(test_y_prediction_result_third))\n",
    "print(test_y_prediction_result_third)\n",
    "# 答案数量正确"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 统计附件二的波形数量结果\n",
    "# 附件二 结果 test_y_prediction_result\n",
    "# test_y_prediction_result_third\n",
    "def count_wave_types(wave_array, mapping):\n",
    "    \"\"\"\n",
    "    统计一个 Numpy 数组中不同类型的波的数量。\n",
    "\n",
    "    :param wave_array: Numpy 数组，其中每个元素代表一种波的编码。\n",
    "    :param mapping: 字典，将波的名称映射到整数编码。\n",
    "    :return: 字典，键是波的类型名称，值是对应类型的波的数量。\n",
    "    \"\"\"\n",
    "    # 获取逆映射，以便将整数编码转换回波的名称\n",
    "    reverse_mapping = {v: k for k, v in mapping.items()}\n",
    "    \n",
    "    # 使用 Numpy 的 bincount 函数统计每个整数编码出现的次数\n",
    "    counts = np.bincount(wave_array)\n",
    "    \n",
    "    # 创建一个字典来存储每种波的数量\n",
    "    wave_counts = {}\n",
    "    \n",
    "    # 遍历编码和它们的数量，将编码转换成波的名称并记录数量\n",
    "    for code, count in enumerate(counts):\n",
    "        if code in reverse_mapping:\n",
    "            wave_type = reverse_mapping[code]\n",
    "            wave_counts[wave_type] = count\n",
    "    \n",
    "    return wave_counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第二测试集结果 {'正弦波': 17, '三角波': 53, '梯形波': 10}\n"
     ]
    }
   ],
   "source": [
    "wave_counts_second = count_wave_types(test_y_prediction_result, mapping)\n",
    "print(\"第二测试集结果\",wave_counts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第三测试集结果 {'正弦波': 119, '三角波': 189, '梯形波': 92}\n"
     ]
    }
   ],
   "source": [
    "wave_counts_third = count_wave_types(test_y_prediction_result_third, mapping)\n",
    "print(\"第三测试集结果\",wave_counts_third)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 80 entries, 0 to 79\n",
      "Columns: 1028 entries, 序号 to 1023\n",
      "dtypes: float64(1024), int64(3), object(1)\n",
      "memory usage: 642.6+ KB\n"
     ]
    }
   ],
   "source": [
    "test_frame.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    序号  温度，oC   频率，Hz 磁芯材料  0（磁通密度B，T）         1         2         3  \\\n",
      "0    1     25   56180  材料1   -0.101398 -0.099219 -0.097045 -0.094873   \n",
      "4    5     50  199170  材料1   -0.077613 -0.075852 -0.074096 -0.072348   \n",
      "14  15     90   99950  材料1    0.003701  0.004186  0.004671  0.005155   \n",
      "24  25     50  125890  材料2   -0.119871 -0.119028 -0.118192 -0.117364   \n",
      "34  35     90  316450  材料2   -0.018084 -0.017887 -0.017692 -0.017498   \n",
      "44  45     90  158730  材料3   -0.043167 -0.042866 -0.042566 -0.042267   \n",
      "54  55     70  396810  材料3   -0.056020 -0.055384 -0.054750 -0.054117   \n",
      "64  65     70  158750  材料4   -0.079803 -0.078004 -0.076231 -0.074480   \n",
      "74  75     70  354610  材料4   -0.021631 -0.021546 -0.021462 -0.021379   \n",
      "79  80     70  316230  材料4    0.000336  0.000413  0.000489  0.000565   \n",
      "\n",
      "           4         5  ...      1014      1015      1016      1017      1018  \\\n",
      "0  -0.092701 -0.090534  ... -0.106739 -0.106970 -0.107198 -0.107405 -0.107564   \n",
      "4  -0.070611 -0.068883  ... -0.084331 -0.084361 -0.084376 -0.084366 -0.084294   \n",
      "14  0.005638  0.006121  ... -0.001153 -0.000667 -0.000181  0.000305  0.000790   \n",
      "24 -0.116541 -0.115718  ... -0.121486 -0.121758 -0.121993 -0.122188 -0.122335   \n",
      "34 -0.017304 -0.017110  ... -0.019358 -0.019296 -0.019231 -0.019158 -0.019072   \n",
      "44 -0.041970 -0.041675  ... -0.044372 -0.044317 -0.044258 -0.044193 -0.044121   \n",
      "54 -0.053486 -0.052857  ... -0.060316 -0.060229 -0.060061 -0.059800 -0.059443   \n",
      "64 -0.072747 -0.071027  ... -0.085685 -0.085710 -0.085701 -0.085653 -0.085566   \n",
      "74 -0.021298 -0.021217  ... -0.021636 -0.021712 -0.021782 -0.021841 -0.021883   \n",
      "79  0.000642  0.000718  ... -0.000427 -0.000350 -0.000274 -0.000198 -0.000121   \n",
      "\n",
      "        1019      1020      1021      1022      1023  \n",
      "0  -0.107633 -0.107374 -0.106567 -0.105241 -0.103473  \n",
      "4  -0.084046 -0.083461 -0.082435 -0.081015 -0.079358  \n",
      "14  0.001276  0.001760  0.002245  0.002730  0.003216  \n",
      "24 -0.122394 -0.122288 -0.121966 -0.121421 -0.120694  \n",
      "34 -0.018964 -0.018826 -0.018661 -0.018476 -0.018281  \n",
      "44 -0.044042 -0.043956 -0.043850 -0.043690 -0.043454  \n",
      "54 -0.058996 -0.058473 -0.057895 -0.057283 -0.056654  \n",
      "64 -0.085412 -0.085085 -0.084386 -0.083187 -0.081584  \n",
      "74 -0.021901 -0.021891 -0.021853 -0.021791 -0.021715  \n",
      "79 -0.000045  0.000031  0.000107  0.000184  0.000260  \n",
      "\n",
      "[10 rows x 1028 columns]\n"
     ]
    }
   ],
   "source": [
    "rows_to_select = [1, 5, 15, 25, 35, 45, 55, 65, 75, 80]\n",
    "adjusted_rows_to_select = [x - 1 for x in rows_to_select]\n",
    "\n",
    "# 使用 iloc 选取指定的行\n",
    "selected_rows = test_frame.iloc[adjusted_rows_to_select]\n",
    "# 输出选取的行\n",
    "print(selected_rows)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>...</th>\n",
       "      <th>1014</th>\n",
       "      <th>1015</th>\n",
       "      <th>1016</th>\n",
       "      <th>1017</th>\n",
       "      <th>1018</th>\n",
       "      <th>1019</th>\n",
       "      <th>1020</th>\n",
       "      <th>1021</th>\n",
       "      <th>1022</th>\n",
       "      <th>1023</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.097045</td>\n",
       "      <td>-0.094873</td>\n",
       "      <td>-0.092701</td>\n",
       "      <td>-0.090534</td>\n",
       "      <td>-0.088371</td>\n",
       "      <td>-0.086208</td>\n",
       "      <td>-0.084045</td>\n",
       "      <td>-0.081882</td>\n",
       "      <td>-0.079719</td>\n",
       "      <td>-0.077562</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.106739</td>\n",
       "      <td>-0.106970</td>\n",
       "      <td>-0.107198</td>\n",
       "      <td>-0.107405</td>\n",
       "      <td>-0.107564</td>\n",
       "      <td>-0.107633</td>\n",
       "      <td>-0.107374</td>\n",
       "      <td>-0.106567</td>\n",
       "      <td>-0.105241</td>\n",
       "      <td>-0.103473</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.074096</td>\n",
       "      <td>-0.072348</td>\n",
       "      <td>-0.070611</td>\n",
       "      <td>-0.068883</td>\n",
       "      <td>-0.067162</td>\n",
       "      <td>-0.065442</td>\n",
       "      <td>-0.063724</td>\n",
       "      <td>-0.062006</td>\n",
       "      <td>-0.060286</td>\n",
       "      <td>-0.058562</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.084331</td>\n",
       "      <td>-0.084361</td>\n",
       "      <td>-0.084376</td>\n",
       "      <td>-0.084366</td>\n",
       "      <td>-0.084294</td>\n",
       "      <td>-0.084046</td>\n",
       "      <td>-0.083461</td>\n",
       "      <td>-0.082435</td>\n",
       "      <td>-0.081015</td>\n",
       "      <td>-0.079358</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.004671</td>\n",
       "      <td>0.005155</td>\n",
       "      <td>0.005638</td>\n",
       "      <td>0.006121</td>\n",
       "      <td>0.006603</td>\n",
       "      <td>0.007085</td>\n",
       "      <td>0.007568</td>\n",
       "      <td>0.008050</td>\n",
       "      <td>0.008533</td>\n",
       "      <td>0.009015</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.001153</td>\n",
       "      <td>-0.000667</td>\n",
       "      <td>-0.000181</td>\n",
       "      <td>0.000305</td>\n",
       "      <td>0.000790</td>\n",
       "      <td>0.001276</td>\n",
       "      <td>0.001760</td>\n",
       "      <td>0.002245</td>\n",
       "      <td>0.002730</td>\n",
       "      <td>0.003216</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>-0.118192</td>\n",
       "      <td>-0.117364</td>\n",
       "      <td>-0.116541</td>\n",
       "      <td>-0.115718</td>\n",
       "      <td>-0.114895</td>\n",
       "      <td>-0.114070</td>\n",
       "      <td>-0.113247</td>\n",
       "      <td>-0.112426</td>\n",
       "      <td>-0.111605</td>\n",
       "      <td>-0.110783</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.121486</td>\n",
       "      <td>-0.121758</td>\n",
       "      <td>-0.121993</td>\n",
       "      <td>-0.122188</td>\n",
       "      <td>-0.122335</td>\n",
       "      <td>-0.122394</td>\n",
       "      <td>-0.122288</td>\n",
       "      <td>-0.121966</td>\n",
       "      <td>-0.121421</td>\n",
       "      <td>-0.120694</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>-0.017692</td>\n",
       "      <td>-0.017498</td>\n",
       "      <td>-0.017304</td>\n",
       "      <td>-0.017110</td>\n",
       "      <td>-0.016917</td>\n",
       "      <td>-0.016727</td>\n",
       "      <td>-0.016537</td>\n",
       "      <td>-0.016346</td>\n",
       "      <td>-0.016155</td>\n",
       "      <td>-0.015965</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.019358</td>\n",
       "      <td>-0.019296</td>\n",
       "      <td>-0.019231</td>\n",
       "      <td>-0.019158</td>\n",
       "      <td>-0.019072</td>\n",
       "      <td>-0.018964</td>\n",
       "      <td>-0.018826</td>\n",
       "      <td>-0.018661</td>\n",
       "      <td>-0.018476</td>\n",
       "      <td>-0.018281</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 1022 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        2         3         4         5         6         7         8     \\\n",
       "0  -0.097045 -0.094873 -0.092701 -0.090534 -0.088371 -0.086208 -0.084045   \n",
       "4  -0.074096 -0.072348 -0.070611 -0.068883 -0.067162 -0.065442 -0.063724   \n",
       "14  0.004671  0.005155  0.005638  0.006121  0.006603  0.007085  0.007568   \n",
       "24 -0.118192 -0.117364 -0.116541 -0.115718 -0.114895 -0.114070 -0.113247   \n",
       "34 -0.017692 -0.017498 -0.017304 -0.017110 -0.016917 -0.016727 -0.016537   \n",
       "\n",
       "        9         10        11    ...      1014      1015      1016      1017  \\\n",
       "0  -0.081882 -0.079719 -0.077562  ... -0.106739 -0.106970 -0.107198 -0.107405   \n",
       "4  -0.062006 -0.060286 -0.058562  ... -0.084331 -0.084361 -0.084376 -0.084366   \n",
       "14  0.008050  0.008533  0.009015  ... -0.001153 -0.000667 -0.000181  0.000305   \n",
       "24 -0.112426 -0.111605 -0.110783  ... -0.121486 -0.121758 -0.121993 -0.122188   \n",
       "34 -0.016346 -0.016155 -0.015965  ... -0.019358 -0.019296 -0.019231 -0.019158   \n",
       "\n",
       "        1018      1019      1020      1021      1022      1023  \n",
       "0  -0.107564 -0.107633 -0.107374 -0.106567 -0.105241 -0.103473  \n",
       "4  -0.084294 -0.084046 -0.083461 -0.082435 -0.081015 -0.079358  \n",
       "14  0.000790  0.001276  0.001760  0.002245  0.002730  0.003216  \n",
       "24 -0.122335 -0.122394 -0.122288 -0.121966 -0.121421 -0.120694  \n",
       "34 -0.019072 -0.018964 -0.018826 -0.018661 -0.018476 -0.018281  \n",
       "\n",
       "[5 rows x 1022 columns]"
      ]
     },
     "execution_count": 158,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 裁剪数据\n",
    "test_input_second_svm_target = selected_rows.loc[:, 2 :]\n",
    "test_input_second_svm_target.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第二测试集指定内容结果 {'正弦波': 2, '三角波': 8}\n"
     ]
    }
   ],
   "source": [
    "# 预测测试机结果\n",
    "test_y_prediction_result_second_target = clf.predict(test_input_second_svm_target)\n",
    "wave_counts_second_target = count_wave_types(test_y_prediction_result_second_target, mapping)\n",
    "print(\"第二测试集指定内容结果\",wave_counts_second_target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2 2 1 2 2 2 2 2 2 1]\n"
     ]
    }
   ],
   "source": [
    "print(test_y_prediction_result_second_target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "|   Index |   Prediction |\n",
      "|--------:|-------------:|\n",
      "|       1 |            2 |\n",
      "|       5 |            2 |\n",
      "|      15 |            1 |\n",
      "|      25 |            2 |\n",
      "|      35 |            2 |\n",
      "|      45 |            2 |\n",
      "|      55 |            2 |\n",
      "|      65 |            2 |\n",
      "|      75 |            2 |\n",
      "|      80 |            1 |\n"
     ]
    }
   ],
   "source": [
    "target_index_values = [1, 5, 15, 25, 35, 45, 55, 65, 75, 80]\n",
    "\n",
    "df_markdown_target = pd.DataFrame({\n",
    "    'Index': target_index_values,\n",
    "    'Prediction': test_y_prediction_result_second_target\n",
    "})\n",
    "\n",
    "# 将DataFrame转换为Markdown格式\n",
    "md_table = df_markdown_target.to_markdown(index=False)\n",
    "\n",
    "# 输出Markdown表格\n",
    "print(md_table)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 额外研究 确认其中一个波形图像"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>...</th>\n",
       "      <th>1014</th>\n",
       "      <th>1015</th>\n",
       "      <th>1016</th>\n",
       "      <th>1017</th>\n",
       "      <th>1018</th>\n",
       "      <th>1019</th>\n",
       "      <th>1020</th>\n",
       "      <th>1021</th>\n",
       "      <th>1022</th>\n",
       "      <th>1023</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.097045</td>\n",
       "      <td>-0.094873</td>\n",
       "      <td>-0.092701</td>\n",
       "      <td>-0.090534</td>\n",
       "      <td>-0.088371</td>\n",
       "      <td>-0.086208</td>\n",
       "      <td>-0.084045</td>\n",
       "      <td>-0.081882</td>\n",
       "      <td>-0.079719</td>\n",
       "      <td>-0.077562</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.106739</td>\n",
       "      <td>-0.106970</td>\n",
       "      <td>-0.107198</td>\n",
       "      <td>-0.107405</td>\n",
       "      <td>-0.107564</td>\n",
       "      <td>-0.107633</td>\n",
       "      <td>-0.107374</td>\n",
       "      <td>-0.106567</td>\n",
       "      <td>-0.105241</td>\n",
       "      <td>-0.103473</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.074096</td>\n",
       "      <td>-0.072348</td>\n",
       "      <td>-0.070611</td>\n",
       "      <td>-0.068883</td>\n",
       "      <td>-0.067162</td>\n",
       "      <td>-0.065442</td>\n",
       "      <td>-0.063724</td>\n",
       "      <td>-0.062006</td>\n",
       "      <td>-0.060286</td>\n",
       "      <td>-0.058562</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.084331</td>\n",
       "      <td>-0.084361</td>\n",
       "      <td>-0.084376</td>\n",
       "      <td>-0.084366</td>\n",
       "      <td>-0.084294</td>\n",
       "      <td>-0.084046</td>\n",
       "      <td>-0.083461</td>\n",
       "      <td>-0.082435</td>\n",
       "      <td>-0.081015</td>\n",
       "      <td>-0.079358</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0.004671</td>\n",
       "      <td>0.005155</td>\n",
       "      <td>0.005638</td>\n",
       "      <td>0.006121</td>\n",
       "      <td>0.006603</td>\n",
       "      <td>0.007085</td>\n",
       "      <td>0.007568</td>\n",
       "      <td>0.008050</td>\n",
       "      <td>0.008533</td>\n",
       "      <td>0.009015</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.001153</td>\n",
       "      <td>-0.000667</td>\n",
       "      <td>-0.000181</td>\n",
       "      <td>0.000305</td>\n",
       "      <td>0.000790</td>\n",
       "      <td>0.001276</td>\n",
       "      <td>0.001760</td>\n",
       "      <td>0.002245</td>\n",
       "      <td>0.002730</td>\n",
       "      <td>0.003216</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>-0.118192</td>\n",
       "      <td>-0.117364</td>\n",
       "      <td>-0.116541</td>\n",
       "      <td>-0.115718</td>\n",
       "      <td>-0.114895</td>\n",
       "      <td>-0.114070</td>\n",
       "      <td>-0.113247</td>\n",
       "      <td>-0.112426</td>\n",
       "      <td>-0.111605</td>\n",
       "      <td>-0.110783</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.121486</td>\n",
       "      <td>-0.121758</td>\n",
       "      <td>-0.121993</td>\n",
       "      <td>-0.122188</td>\n",
       "      <td>-0.122335</td>\n",
       "      <td>-0.122394</td>\n",
       "      <td>-0.122288</td>\n",
       "      <td>-0.121966</td>\n",
       "      <td>-0.121421</td>\n",
       "      <td>-0.120694</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>-0.017692</td>\n",
       "      <td>-0.017498</td>\n",
       "      <td>-0.017304</td>\n",
       "      <td>-0.017110</td>\n",
       "      <td>-0.016917</td>\n",
       "      <td>-0.016727</td>\n",
       "      <td>-0.016537</td>\n",
       "      <td>-0.016346</td>\n",
       "      <td>-0.016155</td>\n",
       "      <td>-0.015965</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.019358</td>\n",
       "      <td>-0.019296</td>\n",
       "      <td>-0.019231</td>\n",
       "      <td>-0.019158</td>\n",
       "      <td>-0.019072</td>\n",
       "      <td>-0.018964</td>\n",
       "      <td>-0.018826</td>\n",
       "      <td>-0.018661</td>\n",
       "      <td>-0.018476</td>\n",
       "      <td>-0.018281</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 1022 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        2         3         4         5         6         7         8     \\\n",
       "0  -0.097045 -0.094873 -0.092701 -0.090534 -0.088371 -0.086208 -0.084045   \n",
       "4  -0.074096 -0.072348 -0.070611 -0.068883 -0.067162 -0.065442 -0.063724   \n",
       "14  0.004671  0.005155  0.005638  0.006121  0.006603  0.007085  0.007568   \n",
       "24 -0.118192 -0.117364 -0.116541 -0.115718 -0.114895 -0.114070 -0.113247   \n",
       "34 -0.017692 -0.017498 -0.017304 -0.017110 -0.016917 -0.016727 -0.016537   \n",
       "\n",
       "        9         10        11    ...      1014      1015      1016      1017  \\\n",
       "0  -0.081882 -0.079719 -0.077562  ... -0.106739 -0.106970 -0.107198 -0.107405   \n",
       "4  -0.062006 -0.060286 -0.058562  ... -0.084331 -0.084361 -0.084376 -0.084366   \n",
       "14  0.008050  0.008533  0.009015  ... -0.001153 -0.000667 -0.000181  0.000305   \n",
       "24 -0.112426 -0.111605 -0.110783  ... -0.121486 -0.121758 -0.121993 -0.122188   \n",
       "34 -0.016346 -0.016155 -0.015965  ... -0.019358 -0.019296 -0.019231 -0.019158   \n",
       "\n",
       "        1018      1019      1020      1021      1022      1023  \n",
       "0  -0.107564 -0.107633 -0.107374 -0.106567 -0.105241 -0.103473  \n",
       "4  -0.084294 -0.084046 -0.083461 -0.082435 -0.081015 -0.079358  \n",
       "14  0.000790  0.001276  0.001760  0.002245  0.002730  0.003216  \n",
       "24 -0.122335 -0.122394 -0.122288 -0.121966 -0.121421 -0.120694  \n",
       "34 -0.019072 -0.018964 -0.018826 -0.018661 -0.018476 -0.018281  \n",
       "\n",
       "[5 rows x 1022 columns]"
      ]
     },
     "execution_count": 179,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_input_second_svm_target.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "metadata": {},
   "outputs": [],
   "source": [
    "row_5_data = test_input_second_svm_target.loc[4 : 5, test_input_second_svm_target.columns[2:]]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>...</th>\n",
       "      <th>1014</th>\n",
       "      <th>1015</th>\n",
       "      <th>1016</th>\n",
       "      <th>1017</th>\n",
       "      <th>1018</th>\n",
       "      <th>1019</th>\n",
       "      <th>1020</th>\n",
       "      <th>1021</th>\n",
       "      <th>1022</th>\n",
       "      <th>1023</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.070611</td>\n",
       "      <td>-0.068883</td>\n",
       "      <td>-0.067162</td>\n",
       "      <td>-0.065442</td>\n",
       "      <td>-0.063724</td>\n",
       "      <td>-0.062006</td>\n",
       "      <td>-0.060286</td>\n",
       "      <td>-0.058562</td>\n",
       "      <td>-0.056834</td>\n",
       "      <td>-0.055109</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.084331</td>\n",
       "      <td>-0.084361</td>\n",
       "      <td>-0.084376</td>\n",
       "      <td>-0.084366</td>\n",
       "      <td>-0.084294</td>\n",
       "      <td>-0.084046</td>\n",
       "      <td>-0.083461</td>\n",
       "      <td>-0.082435</td>\n",
       "      <td>-0.081015</td>\n",
       "      <td>-0.079358</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1 rows × 1020 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       4         5         6         7         8         9         10    \\\n",
       "4 -0.070611 -0.068883 -0.067162 -0.065442 -0.063724 -0.062006 -0.060286   \n",
       "\n",
       "       11        12        13    ...      1014      1015      1016      1017  \\\n",
       "4 -0.058562 -0.056834 -0.055109  ... -0.084331 -0.084361 -0.084376 -0.084366   \n",
       "\n",
       "       1018      1019      1020      1021      1022      1023  \n",
       "4 -0.084294 -0.084046 -0.083461 -0.082435 -0.081015 -0.079358  \n",
       "\n",
       "[1 rows x 1020 columns]"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "row_5_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.frame.DataFrame"
      ]
     },
     "execution_count": 188,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(row_5_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用.stack()将DataFrame转换为Series\n",
    "stacked_data = row_5_data.stack()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.series.Series"
      ]
     },
     "execution_count": 193,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(stacked_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将数据转换为数值型\n",
    "numeric_data_5 = pd.to_numeric(stacked_data, errors='coerce').to_numpy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制图像\n",
    "plt.plot(range(2, len(numeric_data_5) + 2), numeric_data_5)\n",
    "\n",
    "# 添加标题和标签\n",
    "plt.title(\"Row 5 Data Plot\")\n",
    "plt.xlabel(\"Column Number\")\n",
    "plt.ylabel(\"Values\")\n",
    "\n",
    "# 显示图像\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "和预期结果一样.是三角波."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Question 2"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "science39",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
